小程序开发日记(一):重力感应控制图片移动效果

    最近小程序的项目好多啊。。遇到了许多坑,许多没做过的需求,特地开了个博客准备有空记录下,当做总结和提高吧。

    现在在做的项目新加了一个首页头图需要重力感应控制图片左右平移的效果,上网找了一些案例,都不尽如人意,于是参照案例自己动手,简单实现了一下这个功能,在此记录。

    1、核心方法:

    ①translate3d()。这里不用translate()的原因是相比之下translate3d()会得到更高的CPU加速支持,响应速度更快性能更加优化。

    ②wx.onAccelerometerChange()。微信小程序加速度计。

    

    2、html:

<image class="index-img" style="-webkit-transition: transform .5s ease-out;-webkit-transform:translate3d({{transformX}}px,0,0)" src="{{indexImg}}"></image>
      <image class="index-icon" src="../../images/test.png"></image>

    其中.5s部分为动作完成时间,越小速度越快,在本程序中测试发现最合适的为0.5,如果0.1会很卡;

    {{transformX}}部分为x轴平移距离,后面的0为y轴平移距离,此程序需求只需要左右平移所以置0;

    3、js:

onShow: function () {
      obj = this;
      var transformX = obj.data.transformX;
      //var transformY = obj.data.transformY;  //Y轴平移
      wx.onAccelerometerChange(function (res) {
        if (res.x > 0) {
          transformX += 2;
        }
        else if (res.x < 0) {
          transformX -= 2;
        }
        // if (res.y > 0) {                     //Y轴平移
        //   transformY -= 20;
        // }
        // else if (res.y < 0) {
        //   transformY += 20;
        // }
        // if (transformY > 40) {
        //   transformY -= 20;
        // }else if (transformY < -40) {
        //   transformY += 20;
        // }
        if (transformX > 12) {            //限定边界
          transformX -= 2;
        }else if (transformX < -12) {
          transformX += 2;
        }
        obj.setData({
          transformX: transformX,
          // transformY:transformY
        })
      })
    },
    具体思想是在每秒5次的加速度计监听中,如果x值和y值大于0,则相应的将transformX和transformY加减固定值,translate3d()方法会在0.5秒内完成本次位移,如果 transformX和 transformY大于或小于某个值(即到达设定的边界),则减去或加上同等的固定值,保持位移距离为0(取巧方法,还是因为试了别的方法很卡。。)。这样就能简单实现我们所需的效果了,如果需要改变边界和移动速度,可以相应修改时间值和每次位移距离。
  • 1
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值