Html5新瓶装老酒之一--Touch事件处理

移动端的应用越来越多的开始采用html5来实现的。Html5有许多新特性需要开发者注意,比如css3,touch事件等等。比如做一个轮播图,分析其实现要领,有三点:

1.图片的轮播效果对应的css 样式;

2.定时操控函数改变css样式来实现动画;

3.绑定触摸事件对动画的播放进行控制。

在原来的桌面js开发中,jQuery应用非常广泛;而在移动端的js开发中,Zepto更胜一筹。Zepto为很大程度上接近兼容jQuery的js 轻量lib库,只考虑对主流移动浏览器web-kit核心进行支持。

在触摸事件的绑定上,采用Zepto的swipeRight和swipeLeft事件处理:

$(cache.player).swipeLeft(function(){

处理动画的播放控制;

});

这就是典型的事件绑定回调函数,与常见的

$(btn).click(function(){

处理点击事件;

});

点击绑定非常近似,

只不过事件的名字不同而已。

在chrome dev tools顺利通过iphone和galaxy的模拟,但是在iphone,android真机内嵌浏览器下,还是出现了意想不到的问题:

1. 在iphone上滑动基本无效;

2. 在小米和三星上,左滑幅度大的话等于退出移动客户端的内嵌浏览器。

这是为什么呢?第二个问题移动客户端的内嵌浏览器左滑幅度大的问题是内嵌浏览器在滑动下自带默认操作,方便在内嵌浏览器和客户端实现切换吧。

第一个问题就比较头痛了,闪过了debug的念头。在手机端debug,难道要装个debug工具在手机上?或者来个真机模拟测试?男默女泪,人艰不拆。以上想法实现起来都没有现成的,可行的目前只有jsConsole。JsConsole的调试方法,就是包含一个http://jsconsole.com/生成的Javascript文件。在调试时,移动端会连接到远程服务器上并把console.log的内容在服务端上显示,达到debug的目的。

相应的也对zepto的touch事件代码进行了分析:

$(document) .on(‘touchstart MSPointerDown pointerdown‘, function(e){})

.on(‘touchmove MSPointerMove pointermove‘, function(e){})

.on(‘touchend MSPointerUp pointerup‘, function(e){

if ((touch.x2 && Math.abs(touch.x1 - touch.x2) > 30) ||

(touch.y2 && Math.abs(touch.y1 - touch.y2) > 30)){

//swipeTimeout = setTimeout(function() {

touch.el.trigger(‘swipe‘)

touch.el.trigger(‘swipe‘ + (swipeDirection(touch.x1, touch.x2, touch.y1, touch.y2)))

touch = {}

//}, 0)

}

})

代码中可见有三个事件绑定函数。这三个绑定事件为touchstart,touchmove,touchend。在滑动时,手刚点上触摸屏,会触发touchstart事件,移动时每隔十几毫秒会进行touchmove事件的触发,手从触摸屏上移走会触发touchend事件。
 
 在W3C的touchEvent文档中有callback函数的e有说明
interface TouchEvent : UIEvent {

readonly attribute TouchList touches;

readonly attribute TouchList targetTouches;

readonly attribute TouchList changedTouches;

readonly attribute boolean altKey;

readonly attribute boolean metaKey;

readonly attribute boolean ctrlKey;

readonly attribute boolean shiftKey;

};

其中touches和changedTouches中有对触摸点对象的封装

对于任何滑动事件的处理,思路如下:在touchEnd和touchStart触发时做一个touch对象的数据记录,比较两者的移动距离来界定其是左滑还是右滑来进行相应回调的触发即可进行左滑、右滑的事件处理。

iphone中内嵌浏览器Zepto为什么存在问题呢,主要是其在touchEnd中回调时启用了

swipeTimeout = setTimeout(function() {

touch.el.trigger(‘swipe‘)

touch.el.trigger(‘swipe‘ + (swipeDirection(touch.x1, touch.x2, touch.y1, touch.y2)))

touch = {}

}, 0) setTimeout定时函数。这个定时函数在iphone上经常没有机会执行。导致程序的swipeLeft,swipeRight事件在内嵌浏览器无法被触发导致,在safari和chrome下没有问题。这也说明了zepto的兼容性比较差。

移动端的问题基本上是对旧有事件体系的一种扩充,由于移动端存在多种浏览器的兼容性的问题,因此一些个性化的问题会存在。相信这些问题在HTML5长期的改进中会得到解决。

参考文献:

1.触摸事件: http://www.w3.org/TR/touch-events/

2.关于js定时器的深入研究:http://ejohn.org/blog/how-javascript-timers-work/

时间: 2024-11-07 14:36:05

Html5新瓶装老酒之一--Touch事件处理的相关文章

同洲电子转型之殇:新瓶装老酒的定位迷航

同洲电子在"互联网+"转型中不断试错以致迷失,回看这一段坎坷的转型过程,同洲打算以"新瓶装老酒"的方法,走出一条新大道,这一想法,从一开始就错了. 文/张书乐 刊载于<商界评论>2016年3月刊,刊载时有删节 广电系统的骄子同洲电子,国内机顶盒的"老炮儿",在猴年春节前后,一直在难过的"年关"徘徊.1月12日,因公司创始人兼实际控制人袁明质押的股票接近警戒线,同洲不得不申请股票停牌. 曾几何时,同洲电子在广电系统近

HTML5新特性

1.HTML5简介 在之前一直使用的是HTML 4.0标准,而且一直到现在为止,HTML4.0依然作为整个行业的最广泛的使用标准.所谓的HTML5指的就是HTML的第5.0版本,但是对于HTML 5.0标准基本上是让人觉得期待了很久.而且对于HTML5技术与传统的HTML 4最大的差别在于移动端的支持上.例如,在HTML 5之中支持了GPS的取得(可以取得当前移动端的经度和纬度两个信息),那么就可以轻松的实现定位的需要,当然,这一切的操作都必须有一个前提:浏览器要支持.到现在为止一直制约HTML

HTML笔记(2)——HTML5新属性

HTML5 DAY01: 基本内容 HTML5目前最新的规范(标准)是2014年10月推出 2005年左右出现HTML5版本(非标准) W3C组织(两个组织定义H5规范) 学习(研究)HTML5是学习未来(将来主流) HTML版本 - 第一阶段主要学习还是4版本(包含5版本) <header><nav> HTML5版本之后,声明不再出现版本信息 有意地版本,以后可能不再会有新版本 HTML5的规范内容实时更新 注意 HTML5永远都不可能离开javascript. HTML5在移动

Android touch事件处理流程 -- MotionEvent

前面我们看了key事件的处理流程,相信大家对此已经有了新的认识,这篇文章我打算带领大家来看看稍微复杂些的touch 事件的处理流程.说它复杂是因为key事件本身就key down,up,long pressed这几种,而touch事件支持多指触摸,给人的 感觉好像同时在发生多个touch事件一样,所以要处理的手指是多个而不是固定的一个,逻辑上当然也就复杂些了.不过本质 上还都是down.up.long pressed,touch的话还有move事件.接下来让我们直接进入本文的正题. 我们选择直接

Service Mesh 是新瓶装旧酒吗?

点击下载<不一样的 双11 技术:阿里巴巴经济体云原生实践> 本文节选自<不一样的 双11 技术:阿里巴巴经济体云原生实践>一书,点击上方图片即可下载! 作者 | 李云(花名:至简) 阿里云高级技术专家 导读:在即将过去的 2019 年,Service Mesh 开源产品的成熟度虽在全球范围内没有发生质的变化,但在国内仍出现了一些值得特别关注的事件.比如:阿里巴巴在 双11 的部分电商核心应用上落地了完整的 Service Mesh 解决方案,借助 双11 的严苛业务场景完成了规模

HTML5新特性data_*自定义属性使用

HTML5 新特性data_*自定义属性使用HTML5规范里增加了一个自定义data属性. 这个自定义data属性的用法非常的简单,就是你可以往 HTML 标签上添加任意以 "data-"开头的属性, 这些属性页面上是不显示的,它不会影响到你的页面布局和风格,但它却是可读可写的. 使用 data-* 可以解决自定义属性混乱无管理的现状.

Cocoa Touch事件处理流程--响应者链

Cocoa Touch事件处理流程--响应者链 一.事件分类 对于IOS设备用户来说,他们操作设备的方式主要有三种:触摸屏幕.晃动设备.通过遥控设施控制设备.对应的事件类型有以下三种: 1.触屏事件(Touch Event) 2.运动事件(Motion Event) 3.远端控制事件(Remote-Control Event) 今天以触屏事件(Touch Event)为例,来说明在Cocoa Touch框架中,事件的处理流程.首先不得不先介绍响应者链这个概念: 二.响应者链(Responder

HTML5新功能之八 《web works多线程》

一.什么是历史管理 HTML5新功能之七 <历史管理> HTML5新功能之八 <web works多线程>,布布扣,bubuko.com

如何处理HTML5新标签的兼容性问题

支持HTML5新标签: * IE8/IE7/IE6支持通过document.createElement方法产生的标签, 可以利用这一特性让这些浏览器支持HTML5新标签, 浏览器支持新标签后,还需要添加标签默认的样式: * 当然最好的方式是直接使用成熟的框架.使用最多的是html5shim框架 <!--[if lt IE 9]> <script> src="http://html5shim.googlecode.com/svn/trunk/html5.js"&l