MiniP框架概要 -- 视图层 -- 事件
2017-11-29 本文已影响0人
liwuwuzhi
image.png
事件对象
image.png事件分类
事件分为冒泡事件和非冒泡事件:
冒泡事件:当一个组件上的事件被触发后,该事件会向父节点传递。
非冒泡事件:当一个组件上的事件被触发后,该事件不会向父节点传递。
WXML的冒泡事件列表:
类型 | 触发条件 | 最低版本 |
---|---|---|
touchstart | 手指触摸动作开始 | |
touchmove | 手指触摸后移动 | |
touchcancel | 手指触摸动作被打断,如来电提醒,弹窗 | |
touchend | 手指触摸动作结束 | |
tap | 手指触摸后马上离开 | |
longpress | 手指触摸后,超过350ms再离开,如果指定了事件回调函数并触发了这个事件,tap事件将不被触发 | 1.5.0 |
longtap | 手指触摸后,超过350ms再离开(推荐使用longpress事件代替) | |
transitionend | 会在 WXSS transition 或 wx.createAnimation 动画结束后触发 | |
animationstart | 会在一个 WXSS animation 动画开始时触发 | |
animationiteration | 会在一个 WXSS animation 一次迭代结束时触发 | |
animationend | 会在一个 WXSS animation 动画完成时触发 |
注:除上表之外的其他组件自定义事件如无特殊申明都是非冒泡事件,如<form/>
的submit
事件,<input/>
的input
事件,<scroll-view/>
的scroll
事件,(详见各个组件)
事件绑定
事件绑定以bind
或catch
开头,然后紧跟上事件类型,例如bindTab
, catchtouchstart
自版本1.5.0起,可写成bind:Tab
, catch:touchstart
bind
或catch
开头有什么不同呢?
bind事件绑定不会阻止冒泡事件向上冒泡,catch事件绑定可以阻止冒泡事件向上冒泡。
如下面代码:
<view id="outer" bindtap="handleTap1">
外层
<view id="middle" catchtap="handleTap2">
中层
<view id="inner" bindtap="handleTap3">
内层
</view>
</view>
</view>
点击“内层” 会先后调用事件handleTap1和handleTap2(因为tap事件会冒泡到“中层”,而“中层”阻止了tap事件再向上冒泡);
点击“中层” 会触发handleTap2;
点击“外层” 会触发handleTap1;
事件的捕获阶段
自版本1.5.0起,触摸类事件支持捕获阶段。捕获阶段位于冒泡阶段之前,且在捕获阶段中,事件到达节点的顺序与冒泡阶段恰好相反。
capture-bind
: 需要在捕获阶段监听事件;
capture-catch
: 中断捕获阶段和取消冒泡阶段;
在下面的代码中,点击 inner view 会先后调用handleTap2、handleTap4、handleTap3、handleTap1。
<view id="outer" bind:touchstart="handleTap1" capture-bind:touchstart="handleTap2">
outer view
<view id="inner" bind:touchstart="handleTap3" capture-bind:touchstart="handleTap4">
inner view
</view>
</view>
如果将上面代码中的第一个capture-bind改为capture-catch,将只触发handleTap2。
<view id="outer" bind:touchstart="handleTap1" capture-catch:touchstart="handleTap2">
outer view
<view id="inner" bind:touchstart="handleTap3" capture-bind:touchstart="handleTap4">
inner view
</view>
</view>