微信小程序视图控件与bindtap之间的问题的解决


Posted in Javascript onApril 08, 2019

在微信小程序中 最常用的<view>控件 可以用bindtap(冒泡反应) 如<view bindtap="ItemOnclick" data-mType="123">的形式绑定ItemOnclick事件并传递一个dataset,其包含一个名为mType的元素 值为123。

在某一次设计中

有如下结构:

<view class="func-m" bindtap="ItemOnclick" data-mType="123">
    <image src="{{ROOT_PATH}}/images/icon1.png" />
  </view>

ItemOnclick事件在点击在图片上时不会触发 需要点击在图片之外及外层view范围之内的地方 才会触发

若将bindtap写在<image>标签内 则反过来 点击图片会触发 但点击在图片之外及外层view范围之内的地方不会触发

由此我做出判断

点击事件不会向父级或子级控件传递。

(然而这与冒泡反应的定义是不一致的)

但是最近又碰到下面这种情况:

<view style="background-color:#eee;" bindtap="HideMenuList"><!--此为最外层view-->
  <image src="{{ROOT_PATH}}/images/icon1.png" bindtap="ShowMenuList" />
  <view class="menu-list">
     <view class="menu-item" data-mType="CP" bindtap="MenuItemOnclick">
     </view>
     <view class="menu-item" data-mType="HW" bindtap="MenuItemOnclick">
     </view>
   </view>
</view>

需要实现 点击图片 显示菜单列表 点击每个菜单项 触发MenuItemOnclick事件并传递对应的参数

然后当在<view class="menu-list">标签外的地方点击一下 就触发HideMenuList事件隐藏菜单

而实际产生的效果是 当点击图片时 菜单列表一闪便消失 有时直接没显示
后通过打印log发现是当点击图片触发了ShowMenuList事件后 HideMenuList事件也被触发了(且总在ShowMenuList事件之后)

即点击事件由<image>传递到了外层的<view> 因而触发了HideMenuList事件

这样的话那之前的判断就是错误的

目前还没找到这两种情况之间的关键差异,第二种情况的解决方案是 当显示菜单时 同时创造一个透明遮罩层覆盖除菜单列表外的区域,点击到这个透明遮罩层后触发HideMenuList事件并销毁或隐藏遮罩层

PS:第二种情况的方式 以前在html及Android环境下都有用过 是没有这个问题的,可能微信小程序这方面的底层机制和html及Android不一样,还待深究。

微信小程序bindtap与catchtap的区别详解

参考官方文档 https://developers.weixin.qq.com/miniprogram/dev/framework/view/wxml/event.html

bindtap和catchtap都是当用户点击该组件的时候会在该页面对应的Page中找到相应的事件处理函数。

bind事件绑定不会阻止冒泡事件向上冒泡,catch事件绑定可以阻止冒泡事件向上冒泡:

//视图层
<view id="outer" bindtap="handleTap1">   //在组件中绑定bindtap事件 函数handleTap1
 outer view
 <view id="middle" catchtap="handleTap2"> //在组件中绑定catchtap事件 函数handleTap2
  middle view
  <view id="inner" bindtap="handleTap3"> //在组件中绑定bindtap事件 函数handleTap3
   inner view
  </view>
 </view>
</view>
//逻辑层
Page({
  handleTap1:function(event){  
  //点击handleTap1输出 outer view bindtap  
   console.log("outer view bindtap") 
  },
  handleTap2: function (event) { 
  //点击handleTap2输出 middle view catchtap
   console.log("middle view catchtap") 
  },
  handleTap3: function (event) { 
  //点击handleTap3输出 inner view bindtap middle view catchtap 
   console.log("inner view bindtap") 
  },

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

Javascript 相关文章推荐
DB.ASP 用Javascript写ASP很灵活很好用很easy
Jul 31 Javascript
详解JavaScript中void语句的使用
Jun 04 Javascript
js制作网站首页图片轮播特效代码
Aug 30 Javascript
微信小程序开发之相册选择和拍照详解及实例代码
Feb 22 Javascript
JavaScript实现计数器基础方法
Oct 10 Javascript
webpack4简单入门实例
Sep 06 Javascript
详解JQuery基础动画操作
Apr 12 jQuery
详解VUE前端按钮权限控制
Apr 26 Javascript
vue.js实现二级菜单效果
Oct 19 Javascript
vue解决花括号数据绑定不成功的问题
Oct 30 Javascript
不刷新网页就能链接新的js文件方法总结
Mar 01 Javascript
深入了解JavaScript词法作用域
Jul 29 Javascript
微信小程序实现bindtap等事件传参
Apr 08 #Javascript
详解vue中axios请求的封装
Apr 08 #Javascript
使用taro开发微信小程序遇到的坑总结
Apr 08 #Javascript
vue+element+Java实现批量删除功能
Apr 08 #Javascript
如何为你的JavaScript代码日志着色详解
Apr 08 #Javascript
详解element-ui日期时间选择器的日期格式化问题
Apr 08 #Javascript
小程序获取当前位置加搜索附近热门小区及商区的方法
Apr 08 #Javascript
You might like
php Ubb代码编辑器函数代码
2012/07/05 PHP
PHP实现自动登入google play下载app report的方法
2014/09/23 PHP
php将access数据库转换到mysql数据库的方法
2014/12/24 PHP
php实现word转html的方法
2016/01/22 PHP
php经典趣味算法实例代码
2020/01/21 PHP
php生成短网址/短链接原理和用法实例分析
2020/05/29 PHP
非常好的js代码
2006/06/27 Javascript
用于自动添加Digg This!按钮的JavaScript
2006/12/23 Javascript
20个非常有用的PHP类库 加速php开发
2010/01/15 Javascript
Javascript Object.extend
2010/05/18 Javascript
24款非常有用的 jQuery 插件分享
2011/04/06 Javascript
jquery处理json对象
2014/11/03 Javascript
jQuery实现仿腾讯微博滑出效果报告每日天气的方法
2015/05/11 Javascript
jQuery中的通配符选择器使用总结
2016/05/30 Javascript
微信小程序 实现动态显示和隐藏某个控件
2017/04/27 Javascript
详解Angular-cli生成组件修改css成less或sass的实例
2017/07/27 Javascript
浅谈vue-router 路由传参的方法
2017/12/27 Javascript
nodejs 最新版安装npm 的使用详解
2018/01/18 NodeJs
微信小程序scroll-view横向滑动嵌套for循环的示例代码
2018/09/20 Javascript
vue2中引用及使用 better-scroll的方法详解
2018/11/15 Javascript
jquery+css实现Tab栏切换的代码实例
2019/05/14 jQuery
原生js实现无缝轮播图
2020/01/11 Javascript
浅谈nuxtjs校验登录中间件和混入(mixin)
2020/11/06 Javascript
[01:07:19]2018DOTA2亚洲邀请赛 4.5 淘汰赛 Mineski vs VG 第一场
2018/04/06 DOTA
跟老齐学Python之编写类之三子类
2014/10/11 Python
Python的GUI框架PySide的安装配置教程
2016/02/16 Python
python利用不到一百行代码实现一个小siri
2017/03/02 Python
python 正确保留多位小数的实例
2018/07/16 Python
Python 窗体(tkinter)下拉列表框(Combobox)实例
2020/03/04 Python
Python图像识别+KNN求解数独的实现
2020/11/13 Python
Pam & Gela官网:美国性感前卫女装品牌
2018/07/19 全球购物
商务日语专业毕业生求职信
2013/10/26 职场文书
大学四年职业生涯规划书范文
2014/01/02 职场文书
企业公益活动策划方案
2014/08/24 职场文书
离婚起诉书范文2016
2015/11/26 职场文书
Vue项目打包、合并及压缩优化网页响应速度
2021/07/07 Vue.js