• 关于fastclick.js


    fastclick.js解决了什么问题?

    自己接触WebApp开发的前期, 总感觉WebApp上的按键操作不如NativeApp的灵敏, 好像有那么一小点延迟.

    后来才知道, 这是移动端浏览器特意设计的延迟 -- 在移动端, "用户的点击"和"点击生效"之间会有300ms的延迟.

    这一设计是为了支持双击操作(比如双击放大页面). 如果用户在300ms内点击了第二下, 浏览器则会认为用户想要双击而不是单击.

    移动端浏览器是这么处理这300ms延迟的.

    1. 用户点击屏幕, 触发touchstart事件.
    2. 用户停止点击, 触发touchend事件.
    3. 浏览器等待300ms, 看用户是否会点击第二次.
    4. 如果没有第二次点击, 则触发click事件.

    fastclick.js做的事情就是消除这300ms的延迟, 让你的WebApp体验更加像是NativeApp.

    如何使用fastclick.js?

    非常简单, 照着Fastclick的README做就好了.

    除了直接通过<script>标签引入, 它还支持AMD, CommonJS模块系统.

    如果你jQuery的话, 引入fastclick后, 只需要下面这样就OK了.

    $(function() {
        FastClick.attach(document.body);
    });

    我遇到的一个fastclick的坑.

    其实这才是本文的主要目的. 今天碰到一个奇怪的问题: 我发现在桌面版Chrome上, click可以正常触发focus事件; 但是打开Mobile Device Mode之后, click后就无法再触发focus事件了!

    最后把问题定位到了fastclick, 如果不用它就 不会出现这个问题.

    另外, 我还发现, 在我的iPhone上, 只有时间大于100ms, 小于1s的click才可以触发focus, 时间更短或更长的click则都不会.

    具体为什么会有这个问题, 其实我还不清楚=,.=. 但是我做了不少尝试.

    首先是needsclick, 这个README里面有写. 后来我又在源代码里找到了needsfocus. 这两个类可以禁用fastclick的hack, 但是有个缺陷:

    div.needsclick
      div.inner

    这样的结构中, 用户点击.needsclick可以正常触发.needsclickfocus事件, 但是如果点到了.inner就无法触发.needsclickfocus事件了.

    最后我还是选用了简单粗暴的方法: 给元素绑上click事件, 在click中触发focus.

  • 相关阅读:
    Dapr+Kubernetes 实战一
    C# 强大的新特性 Source Generator
    Go语言之网络编程
    GORM系列之创建数据
    Gin框架系列之表单验证
    GORM系列之快速入门
    Gin框架系列之请求参数传递
    Gin框架系列之中间件
    Gin框架系列之优雅重启或关闭
    Go语言之反射
  • 原文地址:https://www.cnblogs.com/douglasvegas/p/5482238.html
Copyright © 2020-2023  润新知