水果公司的那些small and cute的设备给我们提供了前所未有的用户体验。当用户iphone和ipad上运指如飞的时候,那些使用objective-c写出优秀应用的开发人员们心里一定充满了成就感,因为正是他们(而不是水果)让iOS的世界变的丰富多彩。然而对于我们这些以web为自己事业核心的程序员来说,这种让人欲罢不能的多触式体验似乎跟我们关系不大,因为浏览器那一小块地方就是我们和用户的全部交集了。而许多网站为了让iOS的用户能够在多触式体验下使用自己的服务,都专门花钱开发objective-c的本地程序作为自webservice的客户端。
其实,对于一个web程序员或者一个网站来说,如果你的需求仅仅是让iPhone/iPad用户能够正常使用你的服务,那现有的html4页面完全能够满足(也许需要一点点重构,但是很容易);如果再往上一点,你需要让你的web客户端看起来像是用objective-c实现的一样,也并非不可能,只需要将我们熟悉的javascript搬到iOS设备上来就行。
本文从一个多触式网页开发初学者的角度,首先简单介绍一下iOS上的浏览器(这里主要指Safari)所支持的多触式事件模型,然后将触控(Touch)这种简单的动作升级为手势(Gestrue),最后将javascript + html + css构建的应用脱离浏览器,放到iOS设备的屏幕上成为一个本地link并和植物大战僵尸放到一起。
iOS上的Safari也支持click 和mouseover等传统的交互事件,只是不推荐在iOS的浏览器应用上使用click和mouseover,因为这两个事件是为了支持鼠标点击而设计出来的。Click事件在iOS上会有半秒左右的延迟,原因是iOS要highlight接收到click的element。而mouseover/out等事件则会被手指的点击触发。所以,在iOS上,应当抛弃传统的交互事件模型而接受一个新的事件模型。Touch事件和更高级的Gesture事件,能让你的网页交互起来像native应用一样。
处理Touch事件能让你跟踪用户的每一根手指的位置。你可以绑定以下四种Touch事件:
touchstart: // 手指放到屏幕上的时候触发
touchmove: // 手指在屏幕上移动的时候触发
touchend: // 手指从屏幕上拿起的时候触发
touchcancel: // 系统取消touch事件的时候触发。至于系统什么时候会取消,不详。。
Gesture事件则是对touch事件的更高级的封装,主要处理手指slide、rotate、scale等动作,将在下一篇文章详述。
在开始描述touch事件之前,需要先描述一下多触式系统中特有的touch对象(android和iOS乃至nokia最新的meego系统都模拟了类似的对象,这个对象封装一次屏幕触摸,一般来自于手指。它在touch事件触发的时候产生,可以通过touch event handler的event对象取到(一般是通过event.changedTouches属性)。这个对象包括一些重要的属性:
client / clientY:// 触摸点相对于浏览器窗口viewport的位置
pageX / pageY:// 触摸点相对于页面的位置
screenX /screenY:// 触摸点相对于屏幕的位置
identifier: // touch对象的unique ID
下面我们看一个简单例子:当手指触摸屏幕时弹出一个红色层,手指动时跟着动,手指离开时层消失
.spirit { /* 方块的class名称*/
position: absolute;
width: 50px;
height: 50px;
background-color: red;
}
<body style=”height: 100%;margin:0;padding:0”>
<div id=”canvas” style=”position: relative;width:100%;height: 100%;”></div>
</body>
定义touchstart的事件处理函数,并绑定事件:
// define global variable
var canvas = document.getElementById(“canvas”),
spirit, startX, startY;
// touch start listener
function touchStart(event) {
event.preventDefault();
if (spirit ||! event.touches.length) return;
var touch = event.touches[0];
startX = touch.pageX;
startY = touch.pageY;
spirit = document.createElement(“div”);
spirit.className = “spirit”;
spirit.style.left = startX;
spirit.style.top = startY;
canvas.appendChild(spirit);
}
// add touch start listener
canvas.addEventListener(“touchstart”, touchStart, false);
首先,我们将方块spirit作为一个全局对象,因为我们现在要测试单根手指所以屏幕上最好只有一个物体在移动(等会有多触实例)。在touchStart这个事件处理函数中,我们也首先判断了是否已经产生了spirit,也就是是否已经有一个手指放到屏幕上,如果是,直接返回。
和传统的event listener一样,多触式系统也会产生一个event对象,只不过这个对象要多出一些属性,比如这里的event.touches,这个数组对象获得屏幕上所有的touch。注意这里的event.preventDefault(),在传统的事件处理函数中,这个方法阻止事件的默认动作,触摸事件的默认动作是滚屏,我们不想屏幕动来动去的,所以先调用一下这个函数。我们取第一个touch,将其pageX/Y作为spirit创建时的初始位置。接下来,我们创建一个div,并且设置className,left,top三个属性。最后,我们把spirit对象appendChild到容器中。这样,当第一根手指放下的时候,一个红色的,50px见方的方块就放到屏幕上了。
然后,我们要开始处理手指在屏幕上移动的事件:
function touchMove(event) {
event.preventDefault();
if (!spirit || !event.touches.length) return;
var touch = event.touches[0],
x = touch.pageX – startX,
y = touch.pageY – startY;
spirit.style.webkitTransform = 'translate(' + x + 'px, ' + y + 'px)';
}
Canvas.addEventListener(“touchmove”, touchMove, false);
在touch move listener中,我们使用webkit特有的css属性:webkitTransform来移动方块,这个属性具体怎么用请google之。建议构造面向iOS设备的网页的时候尽量使用webkit自己的特性,不但炫,更可以直接利用硬件来提高性能。
最后,我们处理touchend事件。手指提起的时候方块从屏幕上移除。
function touchEnd(event) {
If (!spirit) return;
canvas.removeChild(spirit);
spirit = null;
}
canvas.addEventListener(“touchend”, touchEnd, false);
分享到:
相关推荐
它提供了丰富的组件集合,包括按钮、表格、面板、下拉菜单等,使得开发者能够快速构建功能丰富的、具有触摸友好的交互体验的Web应用程序。与jQuery Mobile相比,Sencha Touch在性能上表现出色,尤其在处理复杂DOM...
本文将深入探讨WebKit WebApp开发中的核心知识点,包括视口管理、链接资源优化以及事件处理机制,旨在帮助前端开发者更好地掌握移动Web开发技巧。 #### 一、Viewport:掌控可视区域 Viewport是移动设备浏览器中...
4. **用户手册**:全面介绍Sencha Touch的架构、工作原理以及最佳实践。 将这个文档部署到Tomcat的webAPP目录下,意味着你可以通过Web服务器访问这些离线文档,无需网络连接,这对于开发者来说非常方便,特别是在...
与桌面浏览器不同,iPhone使用了如touchstart、touchmove、touchend等触摸事件,开发者需要理解这些事件的工作机制,以实现滑动、点击等手势操作。同时,优化滚动性能也是WebApp开发中的关键点,例如使用`-webkit-...
为了使WebApp看起来更像原生应用,可以使用苹果提供的apple-touch-icon来设置启动图标,以及设置meta标签以实现全屏模式和隐藏地址栏。此外,还可以创建一个HTML文件作为应用的主入口,通过添加快捷方式到主屏幕,使...
2. **jQueryftxhdp1209201702052337**:可能是“jQuery Fixed Touch滑动”插件,专门优化了触摸设备的滑动体验,确保在手机和平板电脑上也能流畅操作。 3. **jQuery-banner2541201703062208**:这个插件可能专注于...
Sencha Touch 2.x是该框架的一个重要更新,提供了更好的性能、更多的组件和更丰富的API,使得开发者能够构建具有原生感观的触摸优化应用程序。 在这个登录示例中,开发者可能已经使用了Sencha Touch的内置组件,如`...
7. 兼容性处理:考虑到不是所有设备都支持触摸事件,可能需要添加鼠标事件作为备用方案,或者使用像Hammer.js这样的库来处理跨平台的触摸事件。 通过以上步骤,我们可以构建一个响应用户手势、交互流畅的Web应用...
触摸输入导航将触摸屏选项卡式输入导航范围合并到同一表单内的输入元素 使用制作的视频为什么要使用这个插件? 默认情况下,移动浏览器允许用户“输入”标签或在输入字段之间导航,无论他们属于哪种形式。 问题是,...
Sencha Touch 是一款用于构建原生感观的移动应用的JavaScript框架,它专为触摸设备设计,如iPhone和iPad。"Add2Home"是Sencha Touch的一个功能,允许用户将WebApp快捷方式添加到他们的设备主屏幕上,类似于原生应用...
7. **图标和启动画面**:提供自定义的触摸图标(如`<link rel="apple-touch-icon" href="iphon_tetris_icon.png"/>`)和启动画面(如`<link rel="apple-touch-startup-image" href="startup.png" />`),以提高用户...
- 支持触摸事件处理,提高用户体验。 #### 4. The M Project - **概述**:The M Project是一个基于jQuery开发HTML5应用程序的移动Web应用框架,包含各种UI组件,支持iOS、Android、Palm webOS和BlackBerry等平台...
4. Sencha Touch:Sencha Touch是最早支持HTML5、CSS和JavaScript的框架之一,提供音频/视频、本地存储、圆角、渐变背景和阴影等功能,以实现接近原生应用的用户体验。 5. Baker:专为iPad和iPhone设计的HTML5...
最近做webAPP应用用到一些touch事件,找了很多touch的库(包括zepto的touch模块),在手机上测试都是有各种各样的问题,要么就滑不动,要么只能左右滑动不能上下滑动等,终于找到一个好用强大的touch库,但是只有...
- **介绍**:高级JavaScript库,用于构建跨平台的触摸屏应用。 - **特点**:高性能,丰富的UI组件,支持多种设备。 #### 五、简单示例与测试 1. **示例**:通过使用jQuery Mobile创建一个简单的应用,并使用...
4. Sencha Touch:作为基于HTML5的移动网页开发框架,Sencha Touch致力于提供类似本地应用的体验,支持音频/视频、本地存储、圆角、渐变背景和阴影等特性。 5. Baker:专为iPad和iPhone设计的HTML5电子书框架,用于...
8. **Touch事件**:在iOS设备上,开发者需要处理touchstart、touchmove、touchend等触摸事件,以实现滑动、点击等手势操作。 9. **Web App的PWA(渐进式Web App)化**:通过Service Worker、Web App Manifest和...
例如,使用`-webkit-tap-highlight-color`和`-webkit-touch-callout`属性可以消除链接的默认高亮和长按菜单。 10. **简洁的类和ID命名**:为了节省流量和优化性能,可以使用简短的类和ID名称,如`hd`(header)、`...