美文网首页666笔记侠
49/666 HJDS| 小程序事件Event模型

49/666 HJDS| 小程序事件Event模型

作者: 红叔笔记 | 来源:发表于2018-10-11 10:36 被阅读1次
image

这是666计划的49篇笔记

什么是事件

  • 事件是视图层到逻辑层的通讯方式。
  • 事件可以将用户的行为反馈到逻辑层进行处理。
  • 事件可以绑定在组件上,当达到触发事件,就会执行逻辑层中对应的事件处理函数。
  • 事件对象可以携带额外信息,如 id, dataset, touches。

代码:

index.wxml:

<view id="tapTest" data-hi="WeChat" bindtap="tapName"> Click me! </view>

index.js:

Page({
  tapName: function(event) {
    console.log(event)
  }
})

小程序事件模型

image

事件捕获阶段: 从最外层节点向下传播到目标节点, 依次检查我们经过的节点是否绑定了同一事件类型的监听回调函数。

事件处理阶段: 执行具体的函数。

事件冒泡阶段:从目标节点向上冒泡到最外层节点,依次检查经过的节点是否也绑定了同一事件类型的监听回调函数。

有哪些可捕获事件

  • touchstart 手指按下屏幕
  • touchmove
  • touchcancel
  • touchend
  • tap
  • longpress
  • longtap

可冒泡事件

事件分为冒泡事件和非冒泡事件:

  1. 冒泡事件:当一个组件上的事件被触发后,该事件会向父节点传递。
  2. 非冒泡事件:当一个组件上的事件被触发后,该事件不会向父节点传递。

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 动画完成时触发
touchforcechange 在支持 3D Touch 的 iPhone 设备,重按时会触发 1.9.90

注:除上表之外的其他组件自定义事件如无特殊声明都是非冒泡事件,如<form/>的submit事件,<input/>的input事件,<scroll-view/>的scroll事件,(详见各个组件)

代码演示事件

image

index.wxml:

<view class="container-A" bindtap="clickA">
  container-A
  <view class="container-B" bindtap="clickB">
    container-B
    <view class="container-C" bindtap="clickC">
    container-C
  </view>
  </view>
</view>

点击container-C的结果:

image

点击container-B的结果:

image

加上capture的事件:

index.wxml:

<view class="container-A" bindtap="clickA" capture-bind:tap="captureclickA">
  container-A
  <view class="container-B" bindtap="clickB" capture-bind:tap="captureclickA">
    container-B
    <view class="container-C" bindtap="clickC" capture-bind:tap="captureclickA">
      container-C
    </view>
  </view>
</view>

index.js:

clickA() {
    console.log('click container-A')
  },
  clickB() {
    console.log('click container-B')
  },
  clickC() {
    console.log('click container-C')
  },
  captureclickA() {
    console.log('capture click container-A')
  },
  captureclickB() {
    console.log('capture click container-B')
  },
  captureclickC() {
    console.log('capture click container-C')
  }

点击container-C的结果:

image

capture是和click的方向相反

点击container-B的结果:

image

结论: click是从当前节点向上冒泡执行; capture是从根部开始执行到当前节点

hongjun

相关文章

  • 49/666 HJDS| 小程序事件Event模型

    这是666计划的49篇笔记 什么是事件 事件是视图层到逻辑层的通讯方式。 事件可以将用户的行为反馈到逻辑层进行处理...

  • spring-boot event

    spring-boot 事件模型: event - listenter event ApplicationEven...

  • 44/666 HJDS| 微信小程序之WXSS

    这是666计划的第44篇继续极客时间9小时微信小程序系列笔记。 wxss就是Weisin Style Sheet的...

  • 42/666 HJDS| 微信小程序 之helloworld

    这是666计划的第42篇笔记 本微信小程序是极客时间“9小时搞定微信小程序开发”系列的笔记。 工具已经弄好, 第一...

  • 事件对象

    事件对象 事件对象特点: 只有在事件处理程序执行期间,event对象才存在,一旦事件处理程序执行完成,event对...

  • android事件处理学习笔记

    基于监听的事件处理 监听处理模型: Event Sourse(事件源) Event(事件):用户的一次操作会封装在...

  • 43/666 HJDS| 微信小程序之WXML特性

    这是666计划的第43篇笔记 本微信小程序是极客时间“9小时搞定微信小程序开发”系列的笔记。 微信小程序开发框架-...

  • jQuery相关方法总结 02

    事件 添加事件处理程序 on(enents [,selector] [,data],handler(event))...

  • 30.Vue事件修饰符

    在事件处理程序中调用 event.preventDefault() 或 event.stopPropagation...

  • Vue 事件修饰符

    在事件处理程序中调用event.preventDefault() 或 event.stopPropagation(...

网友评论

    本文标题:49/666 HJDS| 小程序事件Event模型

    本文链接:https://www.haomeiwen.com/subject/aiovaftx.html