一、点透问题以及处理办法

开发中遇到一个问题,就是点击layer弹出框的取消按钮之后,按钮下方的click事件就直接触发了。直接看代码:

$('.swiper-slide').on('click',function(){
window.location.href=url;
});
timer_1=setTimeout(function(){
layer.open({
content:'我是一个弹框',
btn:['下载','取消'],
yes:function(){
window.location.href=url;
}
});
},3000);

点击取消按钮之后,页面直接执行前面的click事件,页面直接跳转了。一开始以为是layer的原因,一直调试,后来发现,原来所谓的“点透”问题。

这就尴尬了,我只是想简单的取消,并没有想跳转啊。解决办法如下,代码改成如下:

$('.swiper-slide').on('click',function(){
setTimeout(function(){
window.location.href=url;
},300);
});

主要思想就是延迟300ms来处理这个事件,这就解决了。但是这又有一个问题,增加了没有必要的300ms。

二、看看其他

1、采用touchend 代替tap

$('.closeBtn').on('touchend',function(e){
  event.preventDefault();
  /*do something*/
});

2、使用fastclick

可以处理点透问题,同时去掉了300ms延迟。

fastclick》

三、fastclick原理

触发时间先后顺序:touchstart  > touchend > click

看上面github上面的代码,就是在touchstart 和touchend之间的时间内(大约是50ms~150ms)内,直接触发元素得click事件(提前),然后就返回了。真正的click事件(300ms)之后的,没有被执行;

同是它还执行了e.preventDefault(),这样就防止了点透的发生。

四、再看看zepto的tab事件

tab事件也是通过touchstart 和touchend模拟出来的,但是tab事件不能很好的阻止点透,因为他在里面加上了时间延迟机制(导致为什么先alert("click")),导致e.preventDefault(),没法执行。

//哪个先?
$("#test").tap(function (e) {
alert("tap");
}).click(function(e)
alert("click");
});

解决办法:添加

$("#test").on("touchend", function (event) {
event.preventDefault();
});

  

 

移动端web开发中对点透的处理,以及理解fastclick如何做到去除300ms延迟的更多相关文章

  1. 彻底理解和解决移动WEB开发中CLICK点透问题

    在移动WEB开发中,有时候可能会出现点透问题,本文将围绕这个TAP点透问题,详细的讲述到底什么是点透,为什么会出现点透,如何避免出现点透,如果不可避免的出现了,如何解决解决移动WEB开发中CLICK点 ...

  2. 说说移动端web开发中的点击穿透问题

    最近一直在忙于一个无线端的项目,由于之前主要工作都是在桌面端,移动端接触的比较少,所以中间遇到了很多的坑,做一个简单的记录. 问题背景 需求中有这样的一个功能,点击取件信息的时候会弹出一个地址列表的浮 ...

  3. Touch事件在移动端web开发中的详解

    一.pc端事件回顾 HTML事件.DOM0事件.DOM2事件 事件对象. 如果上述概念不清楚,请先去了解. 二.移动端事件简介 2.1 pc端事件在移动端的问题 ​ 移动设备主要特点是不配备鼠标,键盘 ...

  4. 移动端web开发的一些知识点

    整理一下自己平时移动端web开发中遇到的问题,也参考一下前辈的一些总结 1.最常见的要数1像素边框了 因为Retine屏的分辨率始终是普通屏幕的2倍,1px的边框在dpr=2的retina屏下会显示成 ...

  5. 【初码干货】使用阿里云对Web开发中的资源文件进行CDN加速的深入研究和实践

    提示:阅读本文需提前了解的相关知识 1.阿里云(https://www.aliyun.com) 2.阿里云CDN(https://www.aliyun.com/product/cdn) 3.阿里云OS ...

  6. 移动端 Web 开发前端知识整理

    文章来源: http://www.restran.net/2015/05/14/mobile-web-front-end-collections/ 最近整理的移动端 Web 开发前端知识,不定期更新. ...

  7. 【前端】移动端Web开发学习笔记【1】

    下一篇:移动端Web开发学习笔记[2] Part 1: 两篇重要的博客 有两篇翻译过来的博客值得一看: 两个viewport的故事(第一部分) 两个viewport的故事(第二部分) 这两篇博客探讨了 ...

  8. 移动端web开发基础概念

    最近在了解移动端web开发的相关知识,有些概念总是模糊不清,这次花费了一些时间整体的梳理了一遍. 分辨率 分辨率可以从显示分辨率与图像分辨率两个方向来分类.显示分辨率(屏幕分辨率)是屏幕图像的精密度, ...

  9. Redis在WEB开发中的应用与实践

    Redis在WEB开发中的应用与实践 一.Redis概述: Redis是一个功能强大.性能高效的开源数据结构服务器,Redis最典型的应用是NoSQL.但事实上Redis除了作为NoSQL数据库使用之 ...

随机推荐

  1. Python模块 - paramiko

    paramiko模块提供了ssh及sft进行远程登录服务器执行命令和上传下载文件的功能.这是一个第三方的软件包,使用之前需要安装. 1 基于用户名和密码的 sshclient 方式登录 # 建立一个s ...

  2. Android:CheckBox控件

    1)ChexkBox继承自CompoundButton组件: 2)isChecked()--确定是否选中:setChecked(bool checked)--设置选中或取消选中: 3)监听事件:Com ...

  3. hdu2674 N!Again---思维

    题目链接: http://acm.hdu.edu.cn/showproblem.php?pid=2674 题目大意: 求n!%2009的值 思路: 由于模2009,所以大于等于2009的直接为0,前2 ...

  4. php过滤表单提交的html等危险代码

    表单提交如果安全做得不好就很容易因为这个表单提交导致网站被攻击了,下面我来分享两个常用的php过滤表单提交的危险代码的实例,各位有需要的朋友可参考. PHP过滤提交表单的html代码里可能有被利用引入 ...

  5. 使用 Docker 一步搞定 ZooKeeper 集群的搭建

    背景 原来学习 ZK 时, 我是在本地搭建的伪集群, 虽然说使用起来没有什么问题, 但是总感觉部署起来有点麻烦. 刚好我发现了 ZK 已经有了 Docker 的镜像了, 于是就尝试了一下, 发现真是爽 ...

  6. Maven 本地仓库明明有jar包,pom文件还是报错解决办法

    方法一: 找到出错的jar包文件位置,删掉_maven.repositories文件 方法二: maven中的本地仓库的index索引没有更新导致 解决方案: 在eclipse中打开菜单 window ...

  7. Python3 面向对象编程之程序设计思想发展

    概述 1940年以前:面向机器 1940年以前:面向机器 最早的程序设计都是采用机器语言来编写的,直接使用二进制码来表示机器能够识别和执行的指令和数 据.简单来说,就是直接编写 和 的序列来代表程序语 ...

  8. python中创建实例属性

    虽然可以通过Person类创建出xiaoming.xiaohong等实例,但是这些实例看上除了地址不同外,没有什么其他不同.在现实世界中,区分xiaoming.xiaohong要依靠他们各自的名字.性 ...

  9. WPF 自定义TabControl控件样式

    一.前言 程序中经常会用到TabControl控件,默认的控件样式很普通.而且样式或功能不一定符合我们的要求.比如:我们需要TabControl的标题能够居中.或平均分布:或者我们希望TabContr ...

  10. Java动态代理模式浅析

    Java代理设计模式 - 静态代理 Java中的动态代理 - 调用处理器 代理设计模式的UML图: 我将首先介绍Java中的各种代理实现方法 Java代理设计模式 - 静态代理 这个例子非常简单,只有 ...