微信小程序之滑动事件以及事件冒泡

微信小程序点击、双击、长按事件可参考 https://blog.csdn.net/qq_40477864/article/details/89159381

一、滑动事件

微信小程序的滑动事件是通过bindtouchmove实现的,通过比较滑动事件前后的坐标判断滑动方向,这里只给出了简单的左右滑动。

wxml:

<!--index.wxml-->
<view class="container">
  <button bindtouchmove="move">
    {{text}}
  </button>
</view>

js:

//index.js
Page({
  data: {
    lastX: 0,          //滑动开始时x坐标初始为0
    lastY: 0,          //滑动开始时y坐标初始为0
    text: "没有滑动"
  },
  //滑动移动事件
  move: function (e) {
    //获取当前鼠标坐标
    var currentX = e.touches[0].pageX
    var currentY = e.touches[0].pageY
    var text = ""
    //左右方向滑动
    if (currentX > this.data.lastX) {
      text = "向右滑动"
    }
    else {
      text = "向左滑动"
    }
    //将当前坐标进行保存以进行下一次计算
    this.data.lastX = currentX
    this.data.lastY = currentY
    this.setData({
      text: text,
    });
  },
})

二、事件冒泡

当一个组件拥有多个事件的时候,为了控制触发具体哪个或哪些事件,就需要控制事件冒泡。

我们先来看一个例子:

html:

<!--index.wxml-->
<view class="container">
<!-- 打印红色 -->
  <view class="red" bindtap='printRed'>
  <!-- 打印蓝色 -->
    <view class="blue" bindtap='printBlue'>
      <!-- 打印黄色 -->
      <view class="yellow" bindtap='printYellow'></view>
    </view>
  </view>
</view>

js:

//index.js
Page({
  data: {
  },
  printRed:function(){
    console.log("red")
  },
  printBlue:function(){
    console.log("blue")
  },
  printYellow:function(){
    console.log("yellow")
  }
})

图示:

当我们点击黄色控制台会打印如下图所示情况

有时候我们点击黄色并不希望触发蓝色和红色事件,这该怎么办呢?

这时我们可以借助catchtap来阻止事件冒泡,如下:

wxml:

<!--index.wxml-->
<view class="container">
<!-- 打印红色 -->
  <view class="red" bindtap='printRed'>
  <!-- 打印蓝色 -->
    <view class="blue" bindtap='printBlue'>
      <!-- 打印黄色 -->
      <view class="yellow" catchtap='printYellow'></view>
    </view>
  </view>
</view>

此时我们点击黄色就只会触发黄色事件

这样做很好的阻止了蓝色和红色事件,那么问题来了,如果我想点击黄色不仅触发黄色事件还要触发红色事件怎么办呢?

  • 2
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
微信小程序中有许多滑动事件可以使用,以下是常用的几个: 1. touchstart:手指触摸屏幕触发的事件。 2. touchmove:手指在屏幕上滑动触发的事件。 3. touchend:手指离开屏幕触发的事件。 4. touchcancel:手指触摸屏幕后被其它事件打断,如来电提醒、弹窗等触发的事件。 5. swipe:手指在屏幕上快速滑动触发的事件。 6. scroll:滚动页面触发的事件。 使用这些滑动事件,你可以实现许多交互效果。例如,你可以使用touchstart、touchmove和touchend事件来实现拖拽效果;使用swipe事件来实现滑动删除、左右滑动切换页面等效果;使用scroll事件来实现上下滚动页面时的特效等等。 以下是一个示例代码,实现了在屏幕上滑动手指时,页面中的一个元素会跟着手指移动: ``` <view class="container" bindtouchstart="touchStart" bindtouchmove="touchMove" bindtouchend="touchEnd"> <view class="ball" style="left: {{ballLeft}}px; top: {{ballTop}}px;"></view> </view> Page({ data: { ballLeft: 0, ballTop: 0, startX: 0, startY: 0 }, touchStart: function(e) { this.setData({ startX: e.touches[0].clientX, startY: e.touches[0].clientY }); }, touchMove: function(e) { var diffX = e.touches[0].clientX - this.data.startX; var diffY = e.touches[0].clientY - this.data.startY; this.setData({ ballLeft: this.data.ballLeft + diffX, ballTop: this.data.ballTop + diffY, startX: e.touches[0].clientX, startY: e.touches[0].clientY }); }, touchEnd: function(e) { // do something } }); ``` 在这个示例中,我们使用了touchstart、touchmove和touchend事件来实现元素的拖拽效果。当手指在屏幕上滑动时,ball元素的位置会随之改变。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值