移动端开发touch和click的区别

偶尔善良 提交于 2019-12-18 09:48:17

【推荐】2019 Java 开发者跳槽指南.pdf(吐血整理) >>>

1、click事件主要存在300毫秒的延迟,且不会存在穿透事件

300ms的由来:

这要追溯至 2007 年初。苹果公司在发布首款 iPhone 前夕,遇到一个问题:当时的网站都是为大屏幕设备所设计的。于是苹果的工程师们做了一些约定,应对 iPhone 这种小屏幕浏览桌面端站点的问题。

这当中最出名的,当属双击缩放(double tap to zoom),这也是会有上述 300 毫秒延迟的主要原因。

双击缩放,顾名思义,即用手指在屏幕上快速点击两次,iOS 自带的 Safari 浏览器会将网页缩放至原始比例。 那么这和 300 毫秒延迟有什么联系呢? 假定这么一个场景。用户在 iOS Safari 里边点击了一个链接。由于用户可以进行双击缩放或者双击滚动的操作,当用户一次点击屏幕之后,浏览器并不能立刻判断用户是确实要打开这个链接,还是想要进行双击操作。因此,iOS Safari 就等待 300 毫秒,以判断用户是否再次点击了屏幕。 鉴于iPhone的成功,其他移动浏览器都复制了 iPhone Safari 浏览器的多数约定,包括双击缩放,几乎现在所有的移动端浏览器都有这个功能。之前人们刚刚接触移动端的页面,在欣喜的时候往往不会care这个300ms的延时问题,可是如今touch端界面如雨后春笋,用户对体验的要求也更高,这300ms带来的卡顿慢慢变得让人难以接受。

2、touch事件 分为touchStart touchMove touchEnd 三个阶段,事件顺序:touchStart->touchEnd->click。touch事件不存在延迟,但是可能会存在穿透事件(原因:加入有两个元素A和B,B在A之上,当我们用touch事件中的回调函数让B元素隐藏,随后A元素触发了click事件。这是因为click事件有300ms的延迟,300ms之后,B元素隐藏了,浏览器触发了click事件,B元素隐藏了,该事件被派发到A 元素之上。),通过e.preventDefault()来阻止

 

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!