小程序笔记

最近接触了一段时间小程序,记录了在开发过程中的一些结论

小程序开发

  1. 小程序前后端交互过程
    • wx.login()获得code,传给后台服务器
    • 后台服务器请微信服务器请求,返回openId/sessionKey(用于获取用户已授权的其他数据,如运动步数),后台把openId/sessionKey存储在session,前端header里就会得到一个set-cookie
    • 小程序前端要缓存(setStorageSync),每次请求携带cookie,后台就可以判断是哪个用户,这个过程要自己实现(和浏览器不一样)
  2. 用户授权过程

    • 授权窗口按确定
      1
      2
      3
      4
      5
      6
      7
      <button  open-type='getUserInfo' bindgetuserinfo="getUserInfo">
      <text>微信授权</text>
      </button>

      getUserInfo: function(res) {
      xxxx
      }
  3. 改变小程序每个页面或者单页面的背景色

    • 在app或者xx.wxss 加入,page 前面不用点
      1
      2
      3
      page {
      background-color: #f4f4f4;
      }
  4. wx:key 在渲染中的作用

    • 当指定wx:key时,列表改变时(包括内容和顺序),渲染时只是重新排序各组件,而不用重新创建
    • key 要求唯一
    • key 对性能提高有好处
  5. 小程序异步问题,首页onLoad() 抢在app.js 的login 方法之前执行

    • 封装代码方法,函数回调
      1
      2
      3
      4
      5
      6
      7
      8
      9
      10
      11
      12
      13
      14
      15
      16
      17
      18
      19
      function waitFlag(signalOrigin, flag, status) {
      return new Promise(function(resolve, reject) {
      let i = 0
      let check = function() {
      if (!!signalOrigin[flag] === !!status) {
      resolve()
      } else if (i++ > 1000) {
      reject()
      } else {
      setTimeout(check, 50)
      }
      }
      check()
      })
      }

      waitFlag.waitFlag(app.globalData, 'hasGet', true).then(() => {
      xxxxxx
      })
  6. 轮播图,图片,高度自适应(提前知道图片的WH,赋值给swiper)

    • 图片设置为 懒加载,否则加载过多图片手机迅速发烫
  7. 点击图片放大功能
  8. 视频图像得先下载,再保存到相册
  9. 给图片添加水印,或者二维码(建议后端来做:一条linux命令搞定)
    • cavans 画图,加字
    • cavans 利用绝对定位隐藏,画图是visable: true
    • visable: false,导出图片到相册
  10. ios 下video 出问题,无法部分视频

    • 设置 video 的custom-cache=”false“
  11. e.currentTarget.dataset/e.Target.dataset 的区别
  12. 图片加载时的占位图
  13. 视频不在可视范围,停止播放
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    ready() {
    // 在自定义组件内,一定要加上后面参数 this
    this.videoContext = wx.createVideoContext('swiperVideo', this)

    if (this.videoContext) {
    this.createIntersectionObserver().relativeToViewport({
    top: -100,
    bottom: -100
    }).observe('.swiper-video', (res) => {
    this.videoContext.pause();
    });
    }
    }

欢迎大家给我留言,提建议,指出错误,一起讨论学习技术的感受!

-------------本文结束感谢您的阅读-------------
Donate comment here