🌙 事件绑定
🌙 1. 什么是小程序事件绑定?
事件就是用户的一些操作行为,如长按,点击,拖动,触摸屏幕等,都是事件。专业的讲,如下:
- 事件是视图层到逻辑层的通讯方式。
- 事件可以将用户的行为反馈到逻辑层进行处理。
- 事件可以绑定在组件上,当组件触发事件,就会执行逻辑层中对应的事件处理函数。
- 事件分为:冒泡事件 和 非冒泡事件,
bind
事件绑定不会阻止冒泡事件向上冒泡,catch
事件绑定可以阻止冒泡事件向上冒泡 - 事件对象可以携带额外信息,如id, dataset, touches。
🌙 2. 小程序事件都有哪些?
- 点击事件 tap:手指触摸后马上离开
- 长按事件 longtap:手指触摸后,超过350ms再离开
- 触摸事件
- touchstart 手指触摸动作开始
- touchend 手指触摸动作结束
- touchmove 手指触摸后移动
- touchcancel 手指触摸动作被打断,如:来电提醒、弹框
- 其他事件,如:submit,input...
🌙 3. 小程序事件绑定如何传递参数?
属性 | 类型 | 说明 |
---|---|---|
type (opens new window) | String | 事件类型 |
timeStamp (opens new window) | Integer | 事件生成时的时间戳 |
target (opens new window) | Object | 触发事件的组件的一些属性值集合 |
currentTarget (opens new window) | Object | 当前组件的一些属性值集合 |
在组件中可以定义数据,这些数据将会通过事件传递给 SERVICE。书写方式:以data-
开头,多个单词由连字符-
链接,不能有大写(大写会自动转成小写)如data-element-type
,最终在 event.target.dataset 中会将连字符转成驼峰elementType
。
<button
data-alpha-beta="1"
data-alphaBeta="2"
bindtap="bindViewTap"
style="margin-top:40rpx;"> 点击事件测试 </button>
<view class="info">
事件类型是:{{eventTag.type}}
</view>
<view class="info">
传递参数 alphaBeta :{{eventTag.target.dataset.alphaBeta}}
</view>
<view class="info">
传递参数 alphabeta :{{eventTag.target.dataset.alphabeta}}
</view>
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
Page({
data:{
eventTag:{}
},
bindViewTap:function(event){
this.setData({
eventTag: event
})
console.log(event)
event.target.dataset.alphaBeta === 1 // - 会转为驼峰写法
event.target.dataset.alphabeta === 2 // 大写会转为小写
}
})
1
2
3
4
5
6
7
8
9
10
11
12
13
2
3
4
5
6
7
8
9
10
11
12
13
🌙 4.冒泡事件和捕获事件
- 冒泡事件:当一个组件上的时间被触发后,该事件会向父节点传递
- 捕获事件:当一个组件上的时间被触发后,该事件不会向父节点传递
<view>
<view bindtap="clickp1">
<button bindtap="clickc1">冒泡事件点击</button>
</view>
<view bindtap="clickp2">
<button catchtap="clickc2">捕获事件点击</button>
</view>
</view>
1
2
3
4
5
6
7
8
2
3
4
5
6
7
8
// index.ts
// 获取应用实例
const app = getApp<IAppOption>()
console.log('app', app.globalData);
Page({
data: {},
clickc1() {
console.log('冒泡事件点击点击:c1');
},
clickc2() {
console.log('捕获事件点击点击: c1');
},
clickp1() {
console.log('冒泡事件点击点击:p1');
},
clickp2() {
console.log('冒泡事件点击点击:p1');
}
})
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
分别点击,结果:
冒泡事件点击点击:c1
冒泡事件点击点击:p1
捕获事件点击点击: c1
1
2
3
2
3
bind开头
: 冒泡事件,会传递给上层事件监听catch开头
: 捕获事件,不会传递给上层事件监听