原生小程序左右滑动切换页面事件

小天天天天    前端    999+ 次    2023-04-28 10:44:52


微信小程序的左右滑动触屏事件,主要有三个事件:touchstart,touchmove,touchend。
这三个事件最重要的属性是startX和startY,表示X,Y坐标。
touchstart在触摸开始时触发事件;
touchend在触摸结束时触发事件;


1:在wxml文件中绑定事件

<view class='header_content' bindtouchstart="touchstart" bindtouchmove="touchmove" bindtouchend="tochend">
{{内容}}
 </view>


2:在js文件中处理左右滑动逻辑

data: {
    //滑动坐标
    startX: 0,
    startY: 0,
    direction: null, //活动方向 L 左滑  R 右滑

  },
  
   //开始滑动
   touchstart: function (e) {
     this.setData({
       startX: e.changedTouches[0].clientX,
       startY: e.changedTouches[0].clientY
     })
   },

   //滑动中判断滑动方向
   touchmove: function (e) {
     let startX = this.data.startX // 开始x坐标
     let startY = this.data.startY // 开始y坐标
     let touchMoveX = e.changedTouches[0].clientX // 活动变化坐标
     let touchMoveY = e.changedTouches[0].clientY //滑动变化坐标
     let angle = this.angle({
       X: startX,
       Y: startY
     }, {
       X: touchMoveX,
       Y: touchMoveY
     })
     //滑动角度超过45retrun
     console.log(Math.abs(angle),"Math.abs(angle)")
     if (Math.abs(angle) > 45) return
     if (touchMoveX > startX) { //右滑
       this.setData({
         direction: 'R'
       })
     } else {
       this.setData({ //左滑
         direction: 'L'
       })
     }
   },

   // 滑动角度限制
   angle: function (start, end) {
     var _X = end.X - start.X,
       _Y = end.Y - start.Y
     //返回角度 / Math,atan()返回数据的反正切值
     return 360 * Math.atan(_Y / _X) / (2 * Math.PI)
   },

  // 滑动结束
   tochend: function (e) {
     let that = this
     if (this.data.direction == 'R') { // 左滑相当于上一页
      console.log("左滑")//这里大家可以根据需求调用接口
     } else if (this.data.direction == 'L') { //右滑相当于下一页
      console.log("右滑")//这里大家可以根据需求调用接口
     } else { // 相当于滑动不成立,清空driection
       this.setData({
         direction: ''
       })
     }
   },

以上便是原生小程序左右滑动切换页面事件的参考案例,请结合具体实际修改后使用。


如果你觉得本篇文章对您有帮助,请打赏作者

上一篇: 平均负载(load average)

下一篇: 微信小程序蓝牙连接发送信息

最新评论

暂无评论

热门文章

最新评论

网站数据

网站文章数:483

今日UV/PV/IP:15/15/15

昨日UV/PV/IP:19/22 /19

TOP