原文地址:http://labs.ft.com/2011/08/fastclick-native-like-tapping-for-touch-apps/

这篇文章是一篇老文了,现在才看到,真是落后啊。

快速点击:像原生一样的触发app

 
这篇博客最初是发表在Assanka的博客上的,后来12年1月的时候Assanka被金融时代收购了,成为了现在的FT实验室。
 
12年8月的时候,把FastClick放到了GitHub上,将会一直使用GitHub来托管。
 
利用JavaScript API 来实现触摸事件和手势是一个非常直观的尝试。随着Webkit浏览器对web标准更多的支持,Web apps 越来越接近原生的app.
但是,你会发现,在越来越深入到Web app的开发过程中,当用户不再把你的app当作一个网站来看待的时候,会出现一些问题。
 
95年和现在的触屏设备,受欢迎程序是不可同日而语的。JS的Dom 事件原本是用来反应鼠标的“点击”动作,每一个事件对应单一的一个动作。
比如onClick事件。但是怎么样把他们转换到触摸屏设备呢?这是不容易的。
 
把一个"tap"事件作为一个"click"事件是可行的方法。至少在IOS上,因为没有tap事件-onClick事件被用来代替它是没问题的。但是为了能够正确的处理多种触屏手势,比如“捏”的手势,两次触击的手势等,就需要做一些妥协。比如tap事件与click事件触发,两者之间就有一个300MS的延迟,会让你的app感觉很迟钝,虽然这不是技术上的问题。
 
我们解决这个问题的方法是,在我们的app中跟踪所有的TouchStart事件,在接收到touchend事件的时候,触发一个click事件。最后,我们完善了快速点击的代码,把他变成了一个小而高效的库,叫做FastClick. 这个代码通过成百上千的用户测试,到目前为止已经比较健壮了。我们很想知道别人是如何解决类似的问题的,也想跟大家一起接受这个挑战并不断的提高我们自己的方式方法。所以我们开放了FastClick. 希望你能够试用它,并提出您的想法。
 
使用FastClick的时候,在需要使用的层上,实例化它。我们使用document.body是因为希望所有的按钮和链接都获得快速点击。在事件监听的时候,‘click’事件的forwardedTouchEvent属性将被设置为true.
 
 
如果在应用程序中,你使用按钮或者是ios风格的菜单,就能感受到明显的反应迟钝现象。下面用一个例子来说明,如何用FastClick来解决这个问题。
 
<button class=”fastclick” onclick=”someHandler()”>Fast click</button>
<button onclick=”someHandler()”>Slow click</button>
<script type='text/javascript'>
var button = document.querySelector(".fastclick");
new FastClick(button);
</script>
 
 
在这个例子中,属性值为fastclick的按钮,当你的手指触摸到屏幕以后,就能立马进行事件处理。而其他的按钮,触摸以后,经了一个延迟的时间才有反应。
 
不过,通过选择器选择的元素在接受代码合成的点击时,会有一些问题。所以如果把FastClick用到包含选择器的元素上,FastClick会忽略代码作用到选择器上的点击事件,只允许触发元素默认的点击事件。
 
如果你想让在FastClick层上的其他元素接受非代码合成的点击的话,你需要两个class的帮助,一个是clickevent,一个是touchandclickevent. 对任何在FastClick层上可点击的元素,触碰元素将会触发不同的效果。
 
(1)没有class值: 元素将只会接受来自FastClick的代码点击。默认的点击事件将会阻止掉。
(2)class值是clickevent 的:元素只会接受默认的点击事件,忽略掉FastClick.
(3)touchandclickevent : 元素 不仅会接受默认的点击事件,还会接受FastClick的事件,并且FastClick的事件会先被触发。
 
<div class="fastclick">
<button onclick="someHandler()">
Will receive programmatic click event接受FastClick的点击
</button>
<button class="clickevent" onclick="someHandler()">
Will receive non-programmatic click event只接受默认的点击事件
</button>
<button class="touchandclickevent" onclick="someHandler()">
Will receive both click events两种点击都支持
</button>
</div>
<script type='text/javascript'>
var button = document.querySelector(".fastclick");
new FastClick(button);
</script>
 
这个有用吗?试一下另外一个例子(http://labs.ft.com/wp-content/uploads/2011/08/fastclickdemo-input.html)。用点击事件来尝试触发input的focus事件。IOS上只会允许非程序的click触发。所以只有在class值为clickevent的时候,才管用

[译]FastClick: native-like tapping for touch apps的更多相关文章

  1. DEPLOYING NATIVE UWP (UNIVERSAL WINDOWS PLATFORM) APPS FOR JAVA DEVELOPERS & PUBLISHING THEM TO THE MICROSOFT STORE

    原文: DEPLOYING NATIVE UWP (UNIVERSAL WINDOWS PLATFORM) APPS FOR JAVA DEVELOPERS & PUBLISHING THEM ...

  2. WebBot - Build Web Apps as Easily as Native Ones - Home

    Python-based Template Packages Python-based Template Packages WebBot - Build Web Apps as Easily as N ...

  3. React Native开发技术周报2

    (1).资讯 1.React Native 0.22_rc版本发布 添加了热自动重载功能 (2).技术文章 1.用 React Native 设计的第一个 iOS 应用 我们想为用户设计一款移动端的应 ...

  4. fastclick源码分析

    https://www.cnblogs.com/diver-blogs/p/5657323.html  地址 fastclick.js源码解读分析 阅读优秀的js插件和库源码,可以加深我们对web开发 ...

  5. fastclick.js源码解读分析

    阅读优秀的js插件和库源码,可以加深我们对web开发的理解和提高js能力,本人能力有限,只能粗略读懂一些小型插件,这里带来对fastclick源码的解读,望各位大神不吝指教~! fastclick诞生 ...

  6. FastClick 填坑及源码解析

    最近产品妹子提出了一个体验issue —— 用 iOS 在手Q阅读书友交流区发表书评时,光标点击总是不好定位到正确的位置: 如上图,具体表现是较快点击时,光标总会跳到 textarea 内容的尾部.只 ...

  7. 【读fastclick源码有感】彻底解决tap“点透”,提升移动端点击响应速度

    申明!!!最后发现判断有误,各位读读就好,正在研究中.....尼玛水太深了 前言 近期使用tap事件为老夫带来了这样那样的问题,其中一个问题是解决了点透还需要将原来一个个click变为tap,这样的话 ...

  8. sencha touch的开源插件和例子

    写了好久的sencha touch,没想到换工作竟然一年多没有搞了.因为项目的缘故收集了好多的组件,由于懒惰,没有整理,现在想想有点后悔了,再加上如果就这样丢弃,感觉有些遗憾,今天整理了一下放在git ...

  9. Native code on Windows Phone 8(转)

    Windows Phone 8 introduces the ability to use native code to implement Windows Phone. In this sectio ...

随机推荐

  1. 解决 CentOS网卡eth0启用不了问题

    转自:http://www.centoscn.com/CentosBug/osbug/2014/0423/2850.html [root@localhost Desktop]# service net ...

  2. 配置ogg异构oracle-mysql(1)基础环境配置

    一.环境描述: 192.168.0.164 ( Oracle ) —> 192.168.0.165 (Mysql ) 版本: 操作系统:redhat5.8 Oracle:  11.2.0.3 M ...

  3. android selector(转)

    Selector的结构描述: <?xml version="1.0" encoding="utf-8"?> <selector xmlns:a ...

  4. Android入门开发之SD卡读写操作(转)

    SD卡的读写是我们在开发android 应用程序过程中最常见的操作.下面介绍SD卡的读写操作方式: 1. 获取SD卡的根目录 String  sdCardRoot = Environment.getE ...

  5. oc中定时器的基本使用

    // 时间间隔 调用的对象  调用的方法 用户信息 是否循环 [NSTimer scheduledTimerWithTimeInterval: target:self selector:@select ...

  6. Input对象的type类型

    Input表示Form表单中的一种输入对象,其又随Type类型的不同而分文本输入框,密码输入框,单选/复选框,提交/重置按钮等,下面一一介绍. 1,type=text        输入类型是text ...

  7. 【pom.xml 依赖】使用net.sf.json-lib-2.4-jdk15.jar所需要的其他依赖架包 以及其一直在pom.xml报错的问题

    特此声明: json-lib-2.4-jdk15.jar仅它本身不够,必须如下的几个依赖架包都有才能使用!!! 首先 将.json-lib-2.4-jdk15.jar以及其相关的依赖架包的正确配置给出 ...

  8. ThinkPHP3.2 volist嵌套循环显示原理

    php页面:$fatherList = $Document->where('pid=1')->select();        foreach($fatherList as $n=> ...

  9. 【转】Linux IO实时监控iostat命令详解

    转自:http://www.cnblogs.com/ggjucheng/archive/2013/01/13/2858810.html 简介 iostat主要用于监控系统设备的IO负载情况,iosta ...

  10. 第一个vs2013控制台程序

    using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.T ...