事件绑定
1. 小程序的事件绑定是通过标签的属性来完成的(与vue、react一致)
2. 通过属性绑定事件其有两种写法
- 绑定冒泡事件(不会帮我们阻止冒泡)【主要】
- 语法:bind事件类型="方法名"
- 方法名不能加括号,而且不能传参
- 绑定非冒泡事件(会帮我们阻止冒泡)
- 语法:catch事件类型="方法名"
- 方法名不能加括号,而且不能传参
3. 上述语法还支持在属性名中间加上“:”写法,例如:
- bind:事件类型
- catch:事件类型
- 自基础版本库2.8.1以后所有的事件都支持加“:”写法
4. 特别需要注意,事件类型有可能其名称与之前大不同,例如以前的点击事件类型名字是`click`,在这里点击事件其实就是手指触摸事件,官网规定触摸事件是`tap`。
事件对象
- 当组件触发事件时,逻辑层绑定该事件的处理方法会收到一个事件对象。通过此对象来进行小程序的自定义事件参数据传递。
- 事件对象在小程序中是非常有意义的,这点与vue和react不同。在小程序中,事件对象是给事件处理程序传递参数的唯一方式。
- BaseEvent基础事件对象属性列表:
属性 | 类型 | 说明 |
---|
type | String | 事件类型 |
timeStamp | **Integer | 页面打开到触发事件所经过的毫秒数。 |
target | Object | 触发事件的组件的一些属性值集合 |
currentTarget | Object | 当前组件的一些属性值集合 |
- target属性与currentTarget,在部分场景下是一样的,当然也存在不一样的情况。
1. 如果事件依附的这个组件(标签)不存在子组件(标签)并且子有属性的时候,两者一样
2. 如果事件依附的这个组件(标签)存在子组件(标签)并且子有属性的时候,则两者不一样
3. 如果以后要获取事件自身的组件(标签)的数据的时候,得使用currentTarget。
- 在小程序中,如果希望在视图结构中通过事件给事件对象传递参数,则可以在标签上使用
data-数据名=“数据值”
的形式传递
案例分析
<view bindtap="tapHandler" data-id="11">
<view data-name="lisi">点我查看</view>
</view>
<view bindtouchstart="start" bindtouchend="end">
点击蓄力
</view>
Page({
data: {
time: 0
},
tapHandler:function(e){
console.log("该标签被点击了");
console.log(e.target.dataset.name);
console.log(e.currentTarget.dataset.id);
},
start:function(){
let now = Date.now();
this.setData({
time: now
})
console.log('吟唱中.....');
},
end:function(){
let diffTime = Date.now() - this.data.time;
console.log('本次蓄力耗时' + diffTime + '毫秒');
console.log('技能发动完毕,cd:30s');
}
})