【微信小程序】事件处理相关

常见事件类型:

某些组件会有自己特性的事件类型
比如input有bindinput/bindblur/bindfocus等
比如scroll-view有bindscrolltowpper/bindscrolltolower等
组件共同都有的事件, 并且比较常见:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
<!--
事件处理
-->
<!-- 绑定点击事件 -->
<button bindtap="clickName"></button>
<button bind:tap="clickName"></button>
<!-- bind与catch区别:下面事件冒泡和捕获有记录 -->
<button catch:tap="clickName"></button>

<!-- 常见的事件 所有组件都有事件 -->
<!-- 手指开始触摸 -->
<view bind:touchstart="onTouchstart"></view>
<!-- 手指移动 -->
<view bind:touchmove="onTouchmove"></view>
<!-- 手指离开 -->
<view bind:touchend="onTouchend"></view>
<!-- 点击 -->
<view bind:tap="onTap"></view>
<!-- longpress 与 tap 只会执行其中一个 -->
<view bind:longpress="onLongpress"></view>

事件对象event

当某个事件触发时, 会产生一个事件对象, 并且这个对象被传入到回调函数中

常见的事件对象属性

1
2
3
4
5
6
7
type:事件类型
timeStamp:打开网页经过多长时间(毫秒)触发了点击
target:当前button的信息
currentTarget:当前button的信息(有时候与target相同)
detail:点击的位置坐标(x,y)
touches: 记录几根手指触摸了按钮的信息[{},{}]
changedTouches: 记录几根手指触摸了按钮的信息[{},{}](有时候与touches相同)

事件对象中touches,changedTouches区别

1
2
3
4
1.touchend事件中不同;
2.多手指触摸不同
touches:当前几根手指按屏的信息
changedTouches:只记录有变化的手指按屏信息

事件对象中target,currentTarget区别

1
2
target:当前产生事件的view信息(所按到的view)
currentTarget:当前触发事件的view(事件冒泡的view)

事件参数的传递

当视图层发生事件时,某些情况需要事件携带一些参数到执行的函数中, 这个时候就可以通过data-属性来完成
渲染层 传递:data-属性的名称
逻辑层 接收:event.target.dataset.属性的名称

1
2
3
4
5
6
7
8
9
 <view 
bind:tap="itemClick"
data-index="{{index}}"
data-item="{{item}}"
></view>

itemClick(event){
event.target.dataset.index
}

事件冒泡和事件捕获

1
2
3
4
5
6
7
8
先捕获,后冒泡
事件捕获:从最外层开始往内传
capture-bind:tap=""
事件冒泡:从最内层开始往外传
bind:tap=""

bind: 会一层层进行传递
catch: 阻止事件的下一步传递