美文网首页Web 前端开发
移动端点透原因-解决方法

移动端点透原因-解决方法

作者: 刘凯gg | 来源:发表于2019-03-22 09:26 被阅读0次

大家都知道移动端click事件有300ms的延时,那么原因又是什么:

在移动端触发时间会按照 touchstart,touchmove,touchend,click 顺序触发;触发touchend,click之间会有200-400不等的时间延时(因为移动端需要判断用户是不是想要进行双击);

 zepto 的tap 事件 可以解决 300 ms延时;

tap 原理:在touchstart 时会记录一个值x1,y1,在touchend时会记录x2,y2,通过对比着几个值,判断用户是否是点击事件,而不是滑动事件,然后直接触发事件;

点透的出现场景:

假如页面上有两个元素A和B。B元素在A元素之上。我们在B元素的touchstart事件上注册了一个回调函数,该回调函数的作用是隐藏B元素。我们发现,当我们点击B元素,B元素被隐藏了,随后,A元素触发了click事件。

相信看完以上两点大家已经明白点透的来龙去脉,那么解决的方案有一下几种:

方案一:zepto

既然zepto的tap事件解决300ms延时了,那点透自然也就不存在了

方案二:禁用缩放

当HTML文档头部包含如下meta标签时:

<meta name="viewport" content="width=device-width,initial-scale=1,minimum-scale=1,maximum-scale=1,user-scalable=no" />

表明这个页面是不可缩放的,那双击缩放的功能就没有意义了,此时浏览器可以禁用默认的双击缩放行为并且去掉300ms的点击延迟

虽然禁止缩放可以解决300ms点击延时, 但是禁止缩放不是我们初衷。

方案三:更改默认的视口宽度

一开始,为了让桌面站点能在移动端浏览器正常显示,移动端浏览器默认的视口宽度并不等于设备浏览器视窗宽度,而是要比设备浏览器视窗宽度大,通常是980px。我们可以通过以下标签来设置视口宽度为设备宽度。

<meta name="viewport" content="width=device-width">

因为双击缩放主要是用来改善桌面站点在移动端浏览体验的,而随着响应式设计的普及,很多站点都已经对移动端坐过适配和优化了,这个时候就不需要双击缩放了,如果能够识别出一个网站是响应式的网站,那么移动端浏览器就可以自动禁掉默认的双击缩放行为并且去掉300ms的点击延迟。如果设置了上述meta标签,那浏览器就可以认为该网站已经对移动端做过了适配和优化,就无需双击缩放操作了。

这个方案相比方案二的好处在于,它没有完全禁用缩放,而只是禁用了浏览器默认的双击缩放行为,但用户仍然可以通过双指缩放操作来缩放页面。

方案四:CSS touch-action

以我的理解来看,指针事件的提出并不是为了解决300ms点击延迟的,而是为了使用一个单独的事件模型,对鼠标、触摸、触控等多种输入类型进行统一的处理。也就是说,移动浏览器不用再为不同的输入设备设计不同的事件,网页的开发者也不用再为不同输入类型的设备写不同的事件响应代码,而是通过统一的指针事件就可以开发出跨不同输入类型终端的应用。

跟300ms点击延迟相关的,是touch-action这个CSS属性。这个属性指定了相应元素上能够触发的用户代理(也就是浏览器)的默认行为。如果将该属性值设置为touch-action: none,那么表示在该元素上的操作不会触发用户代理的任何默认行为,就无需进行300ms的延迟判断。


而设置这个CSS属性与否,指针事件应该都是可以工作的。所以,网上的文章令我很疑惑,希望有大神能给我指示

相关文章

  • 移动端点透原因-解决方法

    大家都知道移动端click事件有300ms的延时,那么原因又是什么: 在移动端触发时间会按照 touchstart...

  • 移动端点透

    可以通过阻止PC默认事件的方式去改变 同时:阻止PC默认事件后,IOS10下用户也不能缩放了

  • 前端常见面试题(九)@郝晨光

    请详解移动端点透,为什么会发生点透?描述发生的场景及解决方案 提到移动端点透问题,就不得不先提到移动端的click...

  • 浅谈移动端点透问题

    在进行移动端开发的时候,我们或多或少会听说过点透现象,那么这个到底是一个什么样的问题呢,以及应该如何去解决,本文将...

  • 高频笔试题

    如何垂直居中不定高度div box-sizing有几个属性值?各代表什么? 移动端点透的解决方案,和触发的原因 数...

  • 前端常见面试题二十一

    目录:1、手写promise封装axios2、如何解决回调地狱3、请详解移动端点透发生场景、原因及解决方案(最优)...

  • 面试题21

    1.手写promise封装axios 2.如何解决回调地狱 3.请详解移动端点透发生场景、原因及解决方案(最优) ...

  • web前端常见面试题(十二)

    目录: 1,请详解移动端点透,为什么会发生点透?描述发生的场景及解决方案(越多越好) 2,移动端为什么会有一像素问...

  • 前端常见面试题十二 (移动端)

    目录: 1、请详解移动端点透,为什么会发生点透?描述发生的场景及解决方案 2、移动端为什么会有一像素问题?如何解决...

  • 请详解移动端点透,为什么会发生点透?描述发生的场景及解决方案

    提到移动端点透问题,就不得不先提到移动端的click事件300ms延迟问题 一、移动端click事件300ms延迟...

网友评论

    本文标题:移动端点透原因-解决方法

    本文链接:https://www.haomeiwen.com/subject/vlwkvqtx.html