移动端用touch还是click?

在移动端开发中,click事件有300ms的延时,由来源于iphone处理双击缩放功能种下的坑。因为用手指在屏幕上快速点击两次,iOS 自带的 Safari 浏览器会将网页缩放至原始比例。为了区分用户的操作是双击还是单击,就增加了300ms的延时等待!随着touch端界面的发展,用户体验的提高使得300ms让人难以忍受。

touch事件存在的问题:

  • 某些场景下存在点击穿透的问题。(在移动端,手指点击一个元素,会经过:touchstart --> touchmove -> touchend --》click。可通过在touch事件中取消默认事件,e.preventDefault()来解决。)

  • touchstart事件时触摸屏幕就会触发,touchend事件是手指离开屏幕就会触发,而有时候,我们仅仅是只想滑动屏幕,却会触发这两个事件。

对于300ms问题解决方案:

  1. 直接使用 fastclick

    优点:全局引入,方便省事

    缺点:增加插件冗余?

  2. 使用 zepto touch

    优点:基于 zepto 核心,还提供 singleTap, doubleTap, longTap, swipe 等简单触控类型判断。

    缺点:坑多,例如使用 setTimeout 延迟触发事件,需要解决点透问题。

  3. 直接原生绑定 touchstart / touchend

    优点:除了减少插件依赖,好像没想到什么优点。

    缺点:需要处理 touchmove scroll 的一些误杀。也不一定就解决快,原生往往预示着需要自己处理一大堆东西。

  4. 造轮子,封装到自己(团队)的核心框架里

  5. 禁用缩放。

    当在html文档中包含如下标签:

     <meta name="viewport" content="user-scalable=no"/>
    
     <meta name="viewport" content="init-scale=1.0,maximum-scale=1.0" />

    表明这个页面是不可以缩放的,那么双击缩放的功能就没有意义了。

  6. 改变默认的视口宽度

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

    现在的移动端开发已经不太需要关注 300ms 的问题了,因为主流的移动浏览器都已经对设置以上meta的页面去除了 300ms 的延迟。对旧的系统及浏览器使用fastclick。

移动端touch与click区别--移动端开发整理笔记(五)的更多相关文章

  1. meta设置与去除默认样式--移动端开发整理笔记(一)

    视口设置: <meta name="viewport" content="width=device-width,user-scalable=no,initial-s ...

  2. 移动端touch、click、tap的区别

    一.click 与tap比较 click与tap都会出发点击事件,但是在手机web端,click会有200-300ms延迟,所以一般用tap(轻击)代替click作为点击事件.singleTap 和 ...

  3. 移动端事件(touchstart、touchmove、touchend)--移动端开发整理笔记(三)

    移动端事件 三个事件 touchstart 手指触摸 相当于PC端 mousedown touchend 手指抬起 相当于PC端 mouseup touchmove 手指滑动 相当于PC端 mousm ...

  4. Flex弹性盒模型(新老版本完整)--移动端开发整理笔记(二)

    Flex布局 Flex即Flexible Box,写法为:display:flex(旧版:display: -webkit-box) 在Webkit内核下,需要加-webkit前缀: .box{ di ...

  5. 移动端适配(rem & viewport)--移动端开发整理笔记(四)

    移动端适配 通过rem适配 em: 根据元素自身的字体大小来计算自己的尺寸 rem: (root em) 根据根节点(html)的字体大小来计算自己的尺寸   我们知道,在不同的手机设备,分辨率大小是 ...

  6. 移动端tap与click的区别 && 点透事件

    移动端的问题 移动端的主要问题是click会有300ms的延迟,主要原因是苹果手机在设计时,考虑到用户在浏览网页时需要放大,所以,在用户点击的300ms之后,才触发click,如果300ms之内还有c ...

  7. 移动端的传统click事件延迟和点透现象

    一.场景描述: 1.A/B两个层上下z轴重叠. 2.上层的A点击后消失或移开.(这一点很重要) 3.B元素本身有默认click事件(如a标签) 或 B绑定了click事件. 在以上情况下,点击A/B重 ...

  8. 移动端Touch事件基础

    1.三个常用的移动端事件 ontouchstart 手指按下时触发 ontouchmove 手指移动时触发 ontouchend 手动抬起时触发 注意:这些事件当作事件属性使用时,不兼容谷歌浏览器. ...

  9. 原生 JS 实现移动端 Touch 滑动反弹

    什么是 Touch滑动?就是类似于 PC端的滚动事件,但是在移动端是没有滚动事件的,所以就要用到 Touch事件结合 js去实现,效果如下: 1. 准备工作 什么是移动端的 Touch事件?在移动端 ...

随机推荐

  1. 分页条件传参bug之解决

    问题描述:以对象作为参数,对象中包含PageNum.PageSize.Condition对象等.对应的@RequestBody为如PageReqDTO reqDTO时,如果使用postman时,不在b ...

  2. Java一个简单的重试工具包

    在接口调用中由于各种原因,可能会重置失败的任务,使用Guava-Retrying可以方便的实现重试功能. 首先,需要引用Guava-Retrying的包 <dependency> < ...

  3. Notepad++显示内容自动换行

  4. SpringBoot第十四篇:统一异常处理

    作者:追梦1819 原文:https://www.cnblogs.com/yanfei1819/p/10984081.html 版权声明:本文为博主原创文章,转载请附上博文链接! 引言   本文将谈论 ...

  5. odoo action

    动作的加载: 刷新视图页面执行load_views方法 /web/dataset/call_kw/model_name/load_views 在odoo/models.py的BaseModel中有一个 ...

  6. springmvc和mybatis面试题(含答案)

    Spring MVC Framework有这样一些特点: 1.它是基于组件技术的.全部的应用对象,无论控制器和视图,还是业务对象之类的都是java组件.并且和Spring提供的其他基础结构紧密集成. ...

  7. [Err] 1055 - Expression #1 of ORDER BY clause is not in GROUP BY clause and contains nonaggregated column 'information_schema.PROFILING.SEQ'

    在Navicat Premium中执行Mysql的一条删除语句,虽然执行成功了,却提示已下错误: 受影响的行: 时间: .005s of ORDER BY clause is not in GROUP ...

  8. scala基础题--函数可以没有返回值案例,编写一个函数,从终端输入一个整数,打印出对应的金字塔

    函数可以没有返回值案例,编写一个函数,从终端输入一个整数,打印出对应的金字塔 import scala.io.StdIn object work02 { def main(args: Array[St ...

  9. 【03】Kubernets:K8S 操作入门

    写在前面的话 经过上一节,我们顺利将 K8S 集群搭建了起来,在其中我也简单的谈了一下关于 K8S 的网络.那么这一节我们主要谈谈如何来简单的使用 K8S 的命令.当然这些命令有很多,我们只是通过一个 ...

  10. Spring Boot 运行原理 - 核心注解

    https://www.jianshu.com/p/23f504713b94 核心注解 打开上面任意一个AutoConfiguration文件,一般都有下面的条件注解,在spring-boot-aut ...