原文地址: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. go sample - format

    go sample - format package mainimport "fmt"import "os"type point struct { x, y i ...

  2. 6-04使用SQL语句更新数据

    修改数据语法: UPDATTE 表名 SET 列名 =更新值 WHERE 更新条件 1:省略WHERE条件的更新: 更新性别: UPDATE  UserInfo SET Gender=1 三行受影响. ...

  3. hdu 4273 2012长春赛区网络赛 三维凸包中心到最近面距离 ***

    新模板 /* HDU 4273 Rescue 给一个三维凸包,求重心到表面的最短距离 模板题:三维凸包+多边形重心+点面距离 */ #include<stdio.h> #include&l ...

  4. VS2010 打开 VS2012 的项目

    用 VS2010 打开 VS2012 项目,只需两步. 1. 修改解决方案文件(*.sln) 使用记事本打开 *.sln 文件,将里面的 Microsoft Visual Studio Solutio ...

  5. Fragment 操作原理

      fragment 本质 fragment 本质上是 view 的容器和控制器,fragment 是 activity 的碎片. activity 是什么呢?activity 是四大组件之一,因为 ...

  6. autoprefixer

    自动化补全工具,在写兼容的css样式的时候,自动补全-webkit,-moz等 sublime和websotrm上都可以安装此工具.

  7. 如何将Android Studio项目提交(更新)到github

    转载:http://blog.csdn.net/jinrall/article/details/45787477 前言 在写这篇文章之前首先我假设你已经安装了Android Studio 并已经会用A ...

  8. 本人经过测试认为最简单最好的popupwindow样式

    <shape xmlns:android="http://schemas.android.com/apk/res/android" > <!-- solid 设置 ...

  9. 使用JdbcTemplate报 Incorrect column count: expected 1, actual 5错误解决

    Incorrect column count: expected 1, actual 5 在使用jdbc的querForObject queryForList的时候,出现Incorrect colum ...

  10. 判断App是否在后台运行

    在一些场景中,经常会需要判断App是否在后台运行,比如是否显示解锁界面,收到新消息是否显示Notification等.需求可能是多样化的,但所依仗的原理是相通的,今天Stay打算说说这些需求的最优解. ...