微信小程序的"事件"挺有意思。看了说明文档后发现它的功能很全,事件可以向父节点传递,而且打印这个事件的信息很透明,调试起来应该非常方便。
接下来把文档copy过来,原文地址:https://mp.weixin.qq.com/debug/wxadoc/dev/framework/view/wxml/event.html
什么是事件
-
事件是视图层到逻辑层的通讯方式。
-
事件可以将用户的行为反馈到逻辑层进行处理。
-
事件可以绑定在组件上,当达到触发事件,就会执行逻辑层中对应的事件处理函数。
-
事件对象可以携带额外信息,如id, dataset, touches。
事件的使用方式
如bindtap,当用户点击该组件的时候会在该页面对应的Page中找到相应的事件处理函数。
-
<view id="tapTest" data-hi="MINA" bindtap="tapName"> Click me! </view>
-
在相应的Page定义中写上相应的事件处理函数,参数是event。
-
Page({
tapName: function(event) {
console.log(event)
}
})
|
可以看到log出来的信息大致如下:
{
"type": "tap",
"timeStamp": 1252,
"target": {
"id": "tapTest",
"offsetLeft": 0,
"offsetTop": 0,
"dataset": {
"hi": "MINA"
}
},
"currentTarget": {
"id": "tapTest",
"offsetLeft": 0,
"offsetTop": 0,
"dataset": {
"hi": "MINA"
}
},
"touches": [{
"pageX": 30,
"pageY": 12,
"clientX": 30,
"clientY": 12,
"screenX": 112,
"screenY": 151
}],
"detail": {
"x": 30,
"y": 12
}
}
|
事件详解
事件分类
事件分为冒泡事件和非冒泡事件:
-
冒泡事件:当一个组件上的事件被触发后,该事件会向父节点传递。
-
非冒泡事件:当一个组件上的事件被触发后,该事件不会向父节点传递。
WXML的冒泡事件列表:
类型 |
触发条件 |
touchstart |
手指触摸 |
touchmove |
手指触摸后移动 |
touchcancel |
手指触摸动作被打断,如来电提醒,弹窗 |
touchend |
手指触摸动作结束 |
tap |
手指触摸后离开 |
longtap |
手指触摸后,超过350ms再离开 |
注:除上表之外的其他组件自定义事件都是非冒泡事件,如
|