点击穿透与FastClick浅读
来源:互联网 发布:java三层架构 编辑:程序博客网 时间:2024/06/06 03:22
点击穿透与FastClick浅读
在移动端项目中,click事件的300ms延迟以及点击穿透的问题是两个最常见的问题,今天就来讨论讨论点击穿透问题
解析:
- 事件执行顺序,touchstart -> touchmove -> touchend -> click
- 如果某个超链接上面盖了一层蒙板,在click之前之前这层蒙板消失了,那么到执行click的事件就会加在超链接上面
而有些框架的tap事件为了解决click的300ms延迟就是用touchstart与touchend事件兼容模拟click事件从而解决click事件在移动端的300ms延迟问题。
FastClick解决方法
FastClick解决300ms延迟问题:
使用touchend以及touchstart兼容产生一个事件对象,然后通过方法sendClick来产生click模拟对象。源码如下
FastClick.prototype.sendClick = function(targetElement, event) { var clickEvent, touch; // On some Android devices activeElement needs to be blurred otherwise the synthetic click will have no effect (#24) if (document.activeElement && document.activeElement !== targetElement) { document.activeElement.blur(); } touch = event.changedTouches[0]; // Synthesise a click event, with an extra attribute so it can be tracked clickEvent = document.createEvent('MouseEvents'); clickEvent.initMouseEvent(this.determineEventType(targetElement), true, true, window, 1, touch.screenX, touch.screenY, touch.clientX, touch.clientY, false, false, false, false, 0, null); clickEvent.forwardedTouchEvent = true; targetElement.dispatchEvent(clickEvent); };
FastClick解决点击击穿
在没有标记使用click的元素上,阻止click事件的派发,即阻止事件冒泡。将click事件在外层父盒子就隔断。源码如下
if (!this.needsClick(this.targetElement) || this.cancelNextClick) { // Prevent any user-added listeners declared on FastClick element from being fired. if (event.stopImmediatePropagation) { event.stopImmediatePropagation(); } else { // Part of the hack for browsers that don't support Event#stopImmediatePropagation (e.g. Android 2) event.propagationStopped = true; } // Cancel the event event.stopPropagation(); event.preventDefault(); return false;}
总结
在项目中,某些用touchend事件作为click事件补充的兄弟,点击穿透的事情你遇见了吗?如果用到touch事件,在一些效果实现上面,使用touchstart事件会比touchend事件给人的感觉灵敏!
阅读全文
0 0
- 点击穿透与FastClick浅读
- fastclick使用与解密
- 移动端点击与点击穿透
- 点击穿透
- 点击穿透
- fastclick
- 深入解析FastClick解决延迟点击
- 也来说说touch事件与点击穿透问题
- H5移动页面的touch事件与点击穿透问题
- 图片点击之穿透点击
- uiview点击事件穿透
- Fragment 点击穿透 解决办法
- android点击事件穿透
- DrawLayout 侧滑侧栏点击穿透
- u3d点击穿透
- android 点击穿透
- DrawerLayout 点击事件穿透
- 385_Fragment点击穿透
- 计算程序运行时间
- 进程间通信::消息队列(实例)
- Scala练习-冒泡排序
- Android 跳转设置网络(全网络、WIFI、手机网络)
- PAT 1008. 数组元素循环右移问题 (20) —— Java
- 点击穿透与FastClick浅读
- java中的日志
- 有皮肤的滑块控件CSliderCtrl->CZipSliderCtl 类
- ASP.NET C# VB.NET HTTPS SSL POST 忽略证书真正解决方法
- ffmpeg超详细综合教程(二)——为直播流添加滤镜
- js数组内元素排序简单方法
- CSS3实现三角形效果
- 使用Source_Insight查看opencv源代码
- 怎么用启动盘重装系统?