博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
再次总结移动端事【件穿穿透】问题
阅读量:7093 次
发布时间:2019-06-28

本文共 1874 字,大约阅读时间需要 6 分钟。

整体代码

  
vui

事件穿透 不是 事件冒泡

1事件冒泡

事件冒泡存在的前提是层级嵌套

如: 这种情况下 两个元素都绑定click事件 或者touchstart事件,点击 app时 事件会冒泡到dow上

如: 这种情况下 两个元素都绑定click事件 或者touchstart事件,点击 app时 事件不会冒泡

总结: 由于body是所有dom的父层级,所以 任何事件都会冒泡到body上

2事件穿透

存在前提:
  • 上层绑定 touchstart事件
  • 下层绑定click事件
  • 上层点击时候 隐藏自身
  • 与两个元素是嵌套 还是 上下层 无关

产生原因: touchstart 先与click执行

解决方案:

app.addEventListener('touchstart', function (e) {    app.style.display = 'none'    console.log('app click')    //重点    e.preventDefault(); //组织事件默认事件,在事件touchstart时候就组织了继续往下产生click\touchend事件    e.stopPropagation();//非必须 此方法主要组织冒泡,由于前面结论可知,仅当dom存在嵌套下才会产生冒泡才需要此方法  })

"e.preventDefault(); //组织事件默认事件,在事件touchstart时候就组织了继续往下产生click\touchend事件" 的解释

app.addEventListener('touchstart', function (e) { app.style.display = 'none' console.log('app touchstart') e.preventDefault(); e.stopPropagation(); }) app.addEventListener('touchend', function (e) { console.log('app end') }) app.addEventListener('click', function (e) { console.log('app click') }) dow.addEventListener('touchstart', function () { console.log('dow touchstart') }) dow.addEventListener('click', function () { console.log('dow click') }) dow.addEventListener('touchend', function (e) { console.log('dow touchend') })

运行点击结果

  • app touchstart
  • app end
  • dow touchend

翻译翻译

-对页面点击一次 会先后产生'touchstart' ----'touchend' ---- 'click'事件

我们对 app 绑定了 'touchstart' ----'touchend' ---- 'click' 并对 touchstart 绑定两个阻止方法

当我们点击app时候

产生 touchstart事件 ,由于对事件组织默认事件,所以接下来不会再产生click事件,也不会冒泡

产生 touchend事件 ,
冒泡 touchend事件 到dow上

补充两篇相关文章

最后的结论

移动端不建议用touch事件,弊端如代码只能在移动端使用,pc端无法使用,且ie内核可能无法兼容

用click事件 目前都用fastclick解决,其本质是在touchend事件中 触发click事件,并阻止默认的click事件,从而避免了300s延迟 和 事件 穿透

转载于:https://www.cnblogs.com/WhiteHorseIsNotHorse/p/8289377.html

你可能感兴趣的文章
UI基础_transform
查看>>
poj 1811 Prime Test 大数素数测试+大数因子分解
查看>>
mysql主从同步
查看>>
获取搜索引擎来源关键词php示例
查看>>
一重循环解决百鸡百钱问题
查看>>
BufferedReader的ready与readLine使用,以及Premature EOF异常
查看>>
集合:ListIterator
查看>>
个人一周计划表
查看>>
RHEL7 添加用户,含sudo权限
查看>>
Example: Getting WMI Data from the Local Computer
查看>>
z-index只能在position属性值为relative或absolute或fixed的元素上有效。
查看>>
使用SecureCRT在远程主机和本地之间传输文件
查看>>
Android AsyncTask完全解析,带你从源码的角度彻底理解
查看>>
简单的NHibernate学习笔记
查看>>
screen工具的安装与使用
查看>>
洛谷 P2404 自然数的拆分问题
查看>>
7998元/年:百度推出百科微站服务
查看>>
智能设备如何防丢减损?
查看>>
linux sysrq
查看>>
Incorrect NSStringEncoding value 0x0000 detected.
查看>>