微信小程序事件之-bind、capture-bind、catch、capture-catch

4 篇文章 0 订阅
订阅专栏
本文详细讲解了小程序中事件绑定的写法,区分bind和catch事件,以及冒泡与非冒泡的区别。通过实例演示了如何控制事件冒泡,并介绍了捕获阶段的概念。核心内容包括事件绑定语法、冒泡与非冒泡事件处理和事件传递顺序。
摘要由CSDN通过智能技术生成

1、事件绑定 

事件绑定的写法和组件属性一致,以key="value"的形式,其中:

  • key表示事件类型
    • 以bind或者catch开头,跟上事件的类型,如bindtap、catchtouchstart 。
    • bind 事件绑定 不会阻止冒泡事件向上冒泡,catch 事件绑定 阻止冒泡事件向上冒泡 。
    • 事件有冒泡阶段和捕获阶段。

    • 自基础库版本1.5.0起,bind和catch后可以紧跟一个冒号,其含义不变,如bind:tap、catch:touchstart。

  • value是对应的函数名称,事件触发后执行该函数。

2、bind事件(冒泡)与catch事件(非冒泡)的区别

小程序中事件分为冒泡事件和非冒泡事件。

示例引用自:(3条消息) 微信小程序bind事件和catch事件区别_xiaoqiang_0719的博客-CSDN博客_微信小程序catch

本文以冒泡事件tap(手指触摸后马上离开,也就是点击事件)为例子来区别bind和catch事件。

  • bindtap  事件绑定不会阻止冒泡事件向上冒泡
  • catchtap  事件绑定可以阻止冒泡事件向上冒泡

假如有三个view点击事件都是用的bindtap,三个view是层级包含关系

.wxml文件:

<view id="outer" bindtap="out">
 
         outer view
 
    <view id="middle" bindtap="middle">
 
         middle view
 
       <view id="inner" bindtap="inner">
 
        inner view
 
       </view>
 
   </view>
 
</view>

.js 文件:

out:function(e){
 
     console.log("--out bindtap click")
 
}, middle: function (e) {
 
     console.log("--middle bindtap click")
 
}, inner: function (e) {
  
     console.log("--inner bindtap click")
 
}


点击out view打印出一条log ,--out bindtap click

点击middle view打印出两条log, --middle bindtap click      --out bindtap click

点击innew view打印出三条log,--inner bindtap click   --middle bindtap click      --out bindtap click

可以看出bindtap不阻止向上冒泡,所以点击inner一直冒泡到了最外层。

如果我们只修改 middle view的bindtap为catchtap

点击out view打印出一条log ,--out bindtap click  (因为没有上层元素故而无法向上冒泡)

点击middle view打印出一条log, --middle bindtap click      (catchtap阻止向上冒泡)

点击innew view打印出两条log,--inner bindtap click   --middle bindtap click      (catchtap阻止向上冒泡)

3、冒泡阶段与捕获阶段?

事件传递有两种方式:冒泡与捕获。事件传递定义了元素事件触发的顺序。

如果你将 <p> 元素插入到 <div> 元素中,用户点击 <p> 元素, 哪个元素的 "click" 事件先被触发呢?

在 冒泡 中,内部元素的事件会先被触发,然后再触发外部元素,即: <p> 元素的点击事件先触发,然后会触发 <div> 元素的点击事件。冒泡:由内及外。

在 捕获 中,外部元素的事件会先被触发,然后才会触发内部元素的事件,即: <div> 元素的点击事件先触发 ,然后再触发 <p> 元素的点击事件。

在bind 、catch之前加capture表示捕获阶段。故,有:

  • bind  冒泡事件、冒泡阶段
  • capture-bind  冒泡事件、捕获阶段
  • catch  非冒泡事件、冒泡阶段
  • capture-catch  非冒泡事件、捕获阶段

示例

在下面的代码中,点击 inner view 会依次调用handleTap2、handleTap4、handleTap3、handleTap1。

解析:

  1. bind 事件不会阻止冒泡事件向上冒泡,故点击 inner view 会向上调用 outer view 的事件;
  2. 捕获阶段在冒泡阶段之前,故handleTap2、handleTap4 在 handleTap3、handleTap1 之前;
  3. 捕获阶段,父元素——>子元素,handleTap2 在 handleTap4 之前;
  4. 冒泡阶段,子元素——>父元素, handleTap3 在 handleTap1 之前。
  5. 综上:依次调用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>

4、总结:

小程序之冒泡事件catchbind区别
wpn1lgl的博客
05-31 1137
所谓的冒泡事件就是事件触发后会一层一层向上传递,使所有的包含其子元素的父级元素都触发该事件。而哪些事件属于冒泡事件是由微信官方所定义好的,列表如下 类型 触发条件 最低版本 touchstart 手指触摸动作开始 touchmove 手指触摸后移动 touchcancel 手指触摸动作被打断,如来电提醒,弹窗 tou...
微信小程序01---小程序初始
蜗牛的博客
10-23 1451
微信小程序初始
小程序01/小程序 事件简介说明 、bind catch事件绑定语法 作用、capture-bind capture-catch事件绑定语法 作用
m0_64494670的博客
12-19 758
小程序01/小程序 事件简介说明 、bind catch事件绑定语法 作用、capture-bind capture-catch事件绑定语法 作用
微信小程序的常用事件的用法
bananananana_123的博客
06-23 442
bindtap 或 catchtap:点击事件,当用户点击某个元素时触发。bindinput 或 catchinput:输入事件,当用户在输入框中输入内容时触发。bindchange 或 catchchange:选择改变事件,当用户选择不同的选项或者切换开关状态时触发。bindsubmit 或 catchsubmit:表单提交事件,当用户提交表单时触发。bindscroll 或 catchscroll:滚动事件,当页面滚动时触发。
事件冒泡和事件捕获
weixin_30532759的博客
03-14 199
事件冒泡或事件捕获? 事件传递有两种方式:冒泡与捕获。 事件传递定义了元素事件触发的顺序。 如果你将 <p> 元素插入到 <div> 元素中,用户点击 <p> 元素, 哪个元素的 "click" 事件先被触发呢? 在冒泡中,内部元素的事件会先被触发,然后再触发外部元素,即: <p> 元素的点击事件先触发,然后会触发 <div> ...
微信小程序开发系列(十五)·bind 绑定的事件(冒泡事件)、catch 绑定的事件(非冒泡事件
时光の尘的博客
03-04 2260
当一个组件的事件被触发后,该事件不会向父节点传递,若此时父节点也有绑定事件,则不会触发父节点的事件。使用 bind 绑定的事件,会触发事件冒泡,如果想阻止事件冒泡,可以使用 catch 来绑定事件。:当一个组件的事件被触发后,该事件会向父节点传递,若此时父节点也有绑定事件,则会一并触发。
微信小程序bindcatch
weixin_45449964的博客
03-17 1448
微信小程序bindcatch事件bind-冒泡事件catch-非冒泡事件 事件 我们知道在web浏览器中,可以用事件来监听用户的动作,比如click、mouseup、mousemove、keypress等事件。且事件执行的顺序是先捕获后冒泡。因此在js事件中我们常常会因为需求对事件进行阻止事件的捕获或者冒泡,那么同样的,在微信小程序事件中,同样有冒泡与非冒泡事件 bind-冒泡事件 冒泡的意思...
小程序事件绑定
aYao__的博客
06-20 573
小程序事件绑定
微信小程序事件对象---绑定、冒泡、捕获)
weixin_45343878的博客
09-03 551
原生组件 小程序中的部分组件是由客户端创建的原生组件,包含: camera 相机 canvas 画布 input(仅在focus时表现为原生组件) 输入框 map 地图 textarea 多行输入框 video 视频 事件冒泡 事件触发验证: 点击父元素红色区域时,只会触发父级绑定的事件 点击子元素橙色区域 currentTarget和target有区别 ...
微信小程序--------原生组件、事件对象(绑定、冒泡、捕获)
weixin_44775723的博客
09-03 1871
一、原生组件 小程序中的部分组件是由客户端创建的原生组件,包含: ①camera—相机 ②canvas—画布 ③input(仅在focus时表现为原生组件) ④map—地图 ⑤textarea—多行输入框 ⑥video—视频 二、事件冒泡 <view id="parent" bindtap="fj"> <view id="child" bindtap="zj"><...
入门微信小程序开发(四)理解小程序事件与冒泡机制
An_Cool_bree的博客
06-24 1045
一.初识小程序事件小程序中,事件是视图层到逻辑层的通讯方式。 比如,我们可以将事件绑定在组件上,当用户操作该组件并触发事件时,事件会将用户行为反馈到逻辑层做处理,也就是对应的执行逻辑层中的事件处理函数。 当然,有时候行为反馈不一定是由用户来主动触发,举个生活中的例子,我们在腾讯视频看龙岭迷窟时,当播放到一集结尾,视频会自动播放下一集。将这个例子拿到小程序中来说,video组件便自带了bindended事件,只要视频播放到末尾便会触发该事件小程序中存在很多由组件自身提供的事件,所以综合来说,小程序
【愚公系列】《微信小程序开发解析》005-事件
热门推荐
时光隧道
07-10 2万+
微信小程序中,事件是用户和程序之间交互的核心概念。通过事件,用户可以与小程序进行各种交互操作,例如点击按钮、输入文字、滑动屏幕等。以下是微信小程序事件的概念和使用方法。事件类型触摸事件:包括触摸开始、触摸移动、触摸结束等,如touchstarttouchmovetouchend等。鼠标事件:主要用于 PC 端小程序,如clickdblclick等。表单事件:与表单控件相关的事件,如submitinputfocusblur等。媒体事件:与音视频控件相关的事件,如playpauseended等。
微信小程序bind函数携带参数
没事就写点
03-04 1万+
微信小程序开发过程中,有很多bind事件需要携带一些参数,比如点击list的某个item时需要知道点击了第几行。一下是官方文档原文: dataset 在组件中可以定义数据,这些数据将会通过事件传递给 SERVICE。 书写方式: 以data-开头,多个单词由连字符-链接,不能有大写(大写会自动转成小写)如data-element-type,最终在 event.currentTarget.datas...
微信小程序 bindcatch区别
Venus 的博客
08-08 1026
1、bind 不会阻止嵌套组件 event 事件上传 一个嵌套组件 viewOne viewTwo,并且都有监听事件。 我们点击之后,发现log输出: 同时出发两个 view 的tap 事件。 2、catch 会阻止嵌套组件的事件上传 换成catch 之后 ,我们发现 log 只有 viewTwo 的事件被触发了。 ...
微信小程序-bindtap等事件传参
测试
01-22 278
微信小程序-bindtap等事件传参1、data-名称 不能有大写字母,如果需要,可以通过 - (中划线)来连接单词,编译的时候小程序会将第二个单词首字母自动大写。图中代码是为了自己标志,所以第二个单词的首字母大写了,其实可以不用。data-* 属性中不可以存放对象。2、注意打印结果中target和currentTarget的区别。target 触发事件的源组件。currentTa...
小程序-事件
weixin_34194317的博客
11-29 126
(文章不啰嗦,为的是最高效率解决问题)基于小程序官方文档进行解析 什么是事件?,事件的使用方式?看官方文档https://developers.weixin.qq.... 本文重点来了事件分类事件分为冒泡事件和非冒泡事件: 1. 冒泡事件:当一个组件上的事件被触发后,该事件会向父节点传递。 2. 非冒泡事件:当一个组件上的事件被触发后,...
微信小程序bind绑定和catch绑定
Warmth_Dream的博客
01-09 766
bind绑定会触发冒泡事件,而catch绑定不会触发冒泡事件。 所谓的冒泡事件就是当事件发生时,这个事件就要从里向外传播开来。
微信小程序事件
m0_69383189的博客
07-05 860
tap 绑定方式 bindtap 或 bind:tap 事件描述手指触摸后马上离开,类似于HTML中的click事件change 绑定方式 bindchange或bindchange 状态改变时触发。targer是触发该事件的源头组件而currentTarget则是当前事件所绑定的组件。input 绑定方式bindinput或bind:input 文本框的输入事件bindtap 相当于HTML中onclick事件。target和currentTarget。
微信小程序-2
因为热爱,所以坚持。
03-04 1797
循环渲染、屏幕适配、样式导入、window配置、tabBar配置、页面配置、网络数据请求
微信小程序不支持 v-bind="$attrs" 这种写法
最新发布
07-26
微信小程序实际上并不直接支持 Vue.js 中的 `v-bind` 指令以及其特定属性绑定语法,例如 `$attrs` 的使用。这是因为微信小程序基于原生的 JavaScript 和 WXML/WXS (一种类似于 XML 的模板语言) 来构建组件,并提供了一套自有的特性集。 在 Vue.js 中,`$attrs` 属性用于获取除 `props` 定义之外的所有属性,这对于处理动态传入的元素属性非常有用。然而,在微信小程序中,开发者通常需要通过其他方式进行类似的功能实现: ### 1. **使用自定义事件** 对于动态传递的属性,开发者可以考虑利用事件机制来接收并处理外部传递的数据。比如,可以在父组件向子组件传递数据时触发一个事件,然后子组件监听该事件并在事件处理器中接收所需的数据。 ```javascript // 父组件中 onDataTransfer(data) { // 使用 data 参数处理数据 } <view class="child-component"> <button @click="handleClick">点击传输数据</button> </view> <script> export default { methods: { handleClick() { this.$emit('data-transfer', { key: 'value' }); }, }, }; </script> ``` ### 2. **使用函数式组件** 微信小程序提供了一些函数式组件的特性,如使用回调函数、事件处理等方式,间接地达到动态绑定效果。开发者可以通过这种方式接收来自外部的属性值。 ### 3. **使用局部数据存储** 对于某些简单的属性,也可以通过组件自身的数据状态来管理,而不是依赖全局的 `$attrs` 对象。这样可以避免过多依赖外部传递的数据而影响组件的复用性和解耦性。 ### 相关问题: 1. 是否有替代方案可以让微信小程序的组件接受动态属性而不修改核心框架? 2. 如何在微信小程序中有效地处理动态传入的样式属性? 3. 在实际项目中如何优化使用动态属性的性能和维护性?
写文章

热门文章

  • 用例之间的关系 13198
  • win11QQ文件另存为崩溃 6089
  • Prolog环境搭建与简单使用 5512
  • 微信小程序事件之-bind、capture-bind、catch、capture-catch 4809
  • 通过script标签引入vue 4454

分类专栏

  • 数字图像处理 1篇
  • 软件下载与环境搭建 2篇
  • Vue 12篇
  • prolog 1篇
  • vscode 2篇
  • 一些学习记录 3篇
  • 绘图 2篇
  • 微信小程序 4篇

最新评论

  • win11QQ文件另存为崩溃

    Arodex: 解决了,谢谢博主!只能说弱智qq做的太垃圾了

  • 微信小程序事件之-bind、capture-bind、catch、capture-catch

    兴趣使然_: 总结的很到位,谢谢

  • win11QQ文件另存为崩溃

    qq_66151918: 超级厉害

  • win11QQ文件另存为崩溃

    roseinmay107: 非常感谢,按照方法解决了问题,不过我是Windows 11 家庭中文版,资源管理器那边的桌面文件夹属性里没有这个选项,要打开onedrvie设置

  • win11QQ文件另存为崩溃

    滚滚滚637: 大家听我说,不要用第二个方法还是直接第一个吧!第二个方法,用了之后桌面文档和很多图标都消失了,还要再开启同步重复方法1

最新文章

  • 图像平滑&锐化极简版总结【数字图像处理】
  • jdk8切换为jdk11不成功
  • vue学习笔记11---条件渲染
2023年1篇
2022年26篇

目录

目录

评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值

玻璃钢生产厂家河南特色商场美陈销售性价比高的玻璃钢雕塑长沙玻璃钢雕塑制作厂家宜昌市玻璃钢雕塑企业玻璃钢卡通雕塑信息生肖玻璃钢雕塑系列河南价值观玻璃钢彩绘雕塑小品广东户外玻璃钢雕塑多少钱常州商场开业美陈迪庆卡通玻璃钢雕塑加工北京中庭商场美陈费用黄冈小区玻璃钢雕塑公司常用玻璃钢雕塑摆件销售唐山小区玻璃钢雕塑安装玻璃钢孔子雕塑批发价格南京玻璃钢雕塑一般多少钱河南景观玻璃钢雕塑供应商湖南玻璃钢动物雕塑哪家有陕西玻璃钢景观雕塑景区玻璃钢雕塑销售品牌玻璃钢雕塑厂家现货玻璃钢艺术雕塑可信赖芜湖学校玻璃钢雕塑宝鸡玻璃钢雕塑裂缝怎么修补虹口区知名玻璃钢雕塑来电咨询晋城玻璃钢海豚雕塑定制许昌玻璃钢浮雕广场雕塑宝鸡玻璃钢卡通雕塑公司宿迁玻璃钢雕塑设计价位万州玻璃钢花盆花器香港通过《维护国家安全条例》两大学生合买彩票中奖一人不认账让美丽中国“从细节出发”19岁小伙救下5人后溺亡 多方发声单亲妈妈陷入热恋 14岁儿子报警汪小菲曝离婚始末遭遇山火的松茸之乡雅江山火三名扑火人员牺牲系谣言何赛飞追着代拍打萧美琴窜访捷克 外交部回应卫健委通报少年有偿捐血浆16次猝死手机成瘾是影响睡眠质量重要因素高校汽车撞人致3死16伤 司机系学生315晚会后胖东来又人满为患了小米汽车超级工厂正式揭幕中国拥有亿元资产的家庭达13.3万户周杰伦一审败诉网易男孩8年未见母亲被告知被遗忘许家印被限制高消费饲养员用铁锨驱打大熊猫被辞退男子被猫抓伤后确诊“猫抓病”特朗普无法缴纳4.54亿美元罚金倪萍分享减重40斤方法联合利华开始重组张家界的山上“长”满了韩国人?张立群任西安交通大学校长杨倩无缘巴黎奥运“重生之我在北大当嫡校长”黑马情侣提车了专访95后高颜值猪保姆考生莫言也上北大硕士复试名单了网友洛杉矶偶遇贾玲专家建议不必谈骨泥色变沉迷短剧的人就像掉进了杀猪盘奥巴马现身唐宁街 黑色着装引猜测七年后宇文玥被薅头发捞上岸事业单位女子向同事水杯投不明物质凯特王妃现身!外出购物视频曝光河南驻马店通报西平中学跳楼事件王树国卸任西安交大校长 师生送别恒大被罚41.75亿到底怎么缴男子被流浪猫绊倒 投喂者赔24万房客欠租失踪 房东直发愁西双版纳热带植物园回应蜉蝣大爆发钱人豪晒法院裁定实锤抄袭外国人感慨凌晨的中国很安全胖东来员工每周单休无小长假白宫:哈马斯三号人物被杀测试车高速逃费 小米:已补缴老人退休金被冒领16年 金额超20万

玻璃钢生产厂家 XML地图 TXT地图 虚拟主机 SEO 网站制作 网站优化