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事件,(详见各个组件)

事件绑定

事件绑定以bindcatch开头,然后紧跟上事件类型,例如bindTab , catchtouchstart
自版本1.5.0起,可写成bind:Tab , catch:touchstart

bindcatch开头有什么不同呢?
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>
上一篇下一篇

猜你喜欢

热点阅读