微信小程序 冒泡事件原理解析


Posted in Javascript onSeptember 27, 2019

在微信小程序的事件分为冒泡事件和非冒泡事件:

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

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

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

事件绑定

以bind或catch开头,然后跟上事件的类型,如bindtap、catchtouchstart。自基础库版本 1.5.0 起,在非原生组件中,bind和catch后可以紧跟一个冒号,其含义不变,如bind:tap、catch:touchstart。

事件冒泡的条件:父元素与子元素绑定同一类事件并且子元素的绑定方式是bind(catch开头会阻止事件冒泡),代码如下:

<view id="outter" bindtap="tap1">
  outer view
  <view id="middle" bindtap="tap2">
   middle view
   <view id="inner" bindtap="tap3">
    inner view
   </view>
  </view>
</view>

tap1: function (e) {
console.log(1, e)
},
tap2: function (e) {

console.log(2, e)
},
tap3: function (e) {

console.log(3, e)
},

点击id为inner的元素,同时也触发了id为middle和outter的元素

微信小程序 冒泡事件原理解析

把inner的bindtap改成catchtap就会阻止事件冒泡

微信小程序 冒泡事件原理解析

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持三水点靠木。

Javascript 相关文章推荐
prototype class详解
Sep 07 Javascript
30个最好的jQuery 灯箱插件分享
Apr 25 Javascript
自定义的一个简单时尚js下拉选择框
Nov 20 Javascript
javascript 数字格式化输出的实现代码
Dec 10 Javascript
JavaScript中的类与实例实现方法
Jan 23 Javascript
javascript实现简单的进度条
Jul 02 Javascript
iOS和Android用同一个二维码实现跳转下载链接的方法
Sep 28 Javascript
Centos7 中 Node.js安装简单方法
Nov 02 Javascript
bootstrap使用validate实现简单校验功能
Dec 02 Javascript
详解使用JS如何制作简单的ASCII图与单极图
Mar 31 Javascript
Node.js操作系统OS模块用法分析
Jan 04 Javascript
ES6数组与对象的解构赋值详解
Jun 14 Javascript
JavaScript实现背景自动切换小案例
Sep 27 #Javascript
vue监听用户输入和点击功能
Sep 27 #Javascript
vue实现文字加密功能
Sep 27 #Javascript
微信小程序 动态修改页面数据及参数传递过程详解
Sep 27 #Javascript
vue实现购物车小案例
Sep 27 #Javascript
解决layui中onchange失效以及form动态渲染失效的问题
Sep 27 #Javascript
layui 地区三级联动 form select 渲染的实例
Sep 27 #Javascript
You might like
PHP include任意文件或URL介绍
2014/04/29 PHP
PHP数据对象映射模式实例分析
2019/03/29 PHP
YII2框架使用控制台命令的方法分析
2020/03/18 PHP
使用Rancher在K8S上部署高性能PHP应用程序的教程
2020/07/10 PHP
jQuery动态添加 input type=file的实现代码
2012/06/14 Javascript
Jquery 模板数据绑定插件的使用方法详解
2013/07/08 Javascript
JavaScript操作HTML元素和样式的方法详解
2015/10/21 Javascript
JavaScript数据结构链表知识详解
2016/11/21 Javascript
mac上node.js环境的安装测试
2017/07/03 Javascript
JavaScript学习笔记之惰性函数示例详解
2017/08/27 Javascript
VUE2.0+Element-UI+Echarts封装的组件实例
2018/03/02 Javascript
jQuery实现表单动态加减、ajax表单提交功能
2018/06/08 jQuery
将Vue组件库更换为按需加载的方法步骤
2020/05/06 Javascript
javascript操作向表格中动态加载数据
2020/08/27 Javascript
Vue +WebSocket + WaveSurferJS 实现H5聊天对话交互的实例
2020/11/18 Vue.js
[00:36]DOTA2上海特级锦标赛 Alliance战队宣传片
2016/03/04 DOTA
[43:57]LGD vs Mineski 2018国际邀请赛小组赛BO2 第二场 8.19
2018/08/21 DOTA
[04:20]DOTA2-DPC中国联赛 正赛 VG vs LBZS 选手采访 1月19日
2021/03/11 DOTA
在windows系统中实现python3安装lxml
2016/03/23 Python
Python使用文件锁实现进程间同步功能【基于fcntl模块】
2017/10/16 Python
python读取.mat文件的数据及实例代码
2019/07/12 Python
Python函数参数类型及排序原理总结
2019/12/19 Python
使用Python爬虫库BeautifulSoup遍历文档树并对标签进行操作详解
2020/01/25 Python
Keras 快速解决OOM超内存的问题
2020/06/11 Python
Python类成员继承重写的实现
2020/09/16 Python
用Python进行websocket接口测试
2020/10/16 Python
Python制作简单的剪刀石头布游戏
2020/12/10 Python
Python 的 f-string 可以连接字符串与数字的原因解析
2021/02/20 Python
HTML5输入框下拉菜单功能的示例代码
2020/09/08 HTML / CSS
澳大利亚网上买书:Angus & Robertson
2019/07/21 全球购物
《陋室铭》教学反思
2014/02/26 职场文书
农民工讨薪标语
2014/06/26 职场文书
大学生实习证明范本
2014/09/19 职场文书
2015年行政执法工作总结
2015/05/23 职场文书
自信主题班会
2015/08/14 职场文书
golang import自定义包方式
2021/04/29 Golang