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


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 相关文章推荐
jquery多行滚动/向左或向上滚动/响应鼠标实现思路及代码
Jan 23 Javascript
js冒泡法和数组转换成字符串示例代码
Aug 14 Javascript
JavaScript 七大技巧(一)
Dec 13 Javascript
详解Vue 实例中的生命周期钩子
Mar 21 Javascript
Vue 项目部署到服务器的问题解决方法
Dec 05 Javascript
js 提取某()特殊字符串长度的实例
Dec 06 Javascript
vue删除html内容的标签样式实例
Sep 13 Javascript
node实现简单的增删改查接口实例代码
Aug 22 Javascript
Layui实现数据表格中鼠标悬浮图片放大效果,离开时恢复原图的方法
Sep 11 Javascript
javascript实现前端成语点击验证
Jun 24 Javascript
vue select 获取value和lable操作
Aug 28 Javascript
js实现特别简单的钟表效果
Sep 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文件向另一个地址post数据,不用表单和隐藏的变量的
2007/03/06 PHP
PHP 生成的XML以FLASH获取为乱码终极解决
2009/08/07 PHP
获取php页面执行时间,数据库读写次数,函数调用次数等(THINKphp)
2013/06/03 PHP
ThinkPHP模版中导入CSS和JS文件的方法
2014/11/29 PHP
深入研究PHP中的preg_replace和代码执行
2018/08/15 PHP
JS高级拖动技术 setCapture,releaseCapture
2011/07/31 Javascript
js nextSibling属性和previousSibling属性概述及使用注意
2013/02/16 Javascript
Json和Jsonp理论实例代码详解
2013/11/15 Javascript
JS小游戏之极速快跑源码详解
2014/09/25 Javascript
JavaScript 作用域链解析
2014/11/13 Javascript
JavaScript识别网页关键字并进行描红的方法
2015/11/09 Javascript
JavaScript学习笔记之取数组中最大值和最小值
2016/03/23 Javascript
jQuery validate插件功能与用法详解
2016/12/15 Javascript
微信小程序wepy框架笔记小结
2018/08/08 Javascript
详解vue.js移动端配置flexible.js及注意事项
2019/04/10 Javascript
[46:14]VGJ.T vs Liquid 2018国际邀请赛小组赛BO2 第一场 8.19
2018/08/21 DOTA
python数据结构树和二叉树简介
2014/04/29 Python
零基础学Python(一)Python环境安装
2014/08/20 Python
python实现调用其他python脚本的方法
2014/10/05 Python
python 数据清洗之数据合并、转换、过滤、排序
2017/02/12 Python
使用paramiko远程执行命令、下发文件的实例
2017/10/01 Python
微信跳一跳python代码实现
2018/01/05 Python
代码分析Python地图坐标转换
2018/02/08 Python
python list元素为tuple时的排序方法
2018/04/18 Python
Python使用Matplotlib模块时坐标轴标题中文及各种特殊符号显示方法
2018/05/04 Python
在mac下查找python包存放路径site-packages的实现方法
2018/11/06 Python
详解Python中is和==的区别
2019/03/21 Python
200行python代码实现2048游戏
2019/07/17 Python
Windows+Anaconda3+PyTorch+PyCharm的安装教程图文详解
2020/04/03 Python
Django微信小程序后台开发教程的实现
2020/06/03 Python
毕业自荐书
2013/12/09 职场文书
房地产资料员岗位职责
2014/07/02 职场文书
买房子个人收入证明
2014/10/12 职场文书
关于运动会的宣传稿
2015/07/23 职场文书
护士业务学习心得体会
2016/01/25 职场文书
MySQL InnoDB ReplicaSet(副本集)简单介绍
2021/04/24 MySQL