针对多点触控浏览器进行的开发

XOOM平板接入WPA2-Enterprise网络实战指南 WPA2-Enterprise是企业级无线网络的核心安全机制,基于802.1X和RADIUS实现双向身份认证,区别于家庭Wi-Fi的预共享密钥模式。其技术原理依赖EAP框架(如PEAP-MSCHAPv2)、TLS证书信任链与服务器端策略协同。对Android 3.x等老旧设备而言,挑战集中于系统级EAP支持残缺、证书库陈旧、配置界面Bug及wpa_supplicant版本限制。本文聚焦XOOM这类古董级终端,在不刷机、不Root前提下,通过原生配置文件手写、DER格式CA证书精准注入、phase2参数严格校 阅读详情

在本文中,我会深入研究iOS和Android设备提供的触摸事件API,探索一下可以构建哪些类型的应用,给出一些最佳做法,并论及一些使得可触控应用(touch-enabled application)的开发变得更加容易的有用技术。

前言

诸如智能手机和平板电脑一类的移动设备通常会有一个电容式触摸屏(capacitive touch-sensitive screen),以捕捉用户的手指所做的交互。随着移动网络的发展,其能够支持越来越复杂的应用,web开发者需要一种方法来处理这些事件。例如,几乎所有的快节奏游戏都需要玩家一次按下多个按钮,这种方式,在触摸屏情况下,意味着多点触摸。

Apple在iOS 2.0中引入了触摸事件API,Android正迎头赶上这一事实标准,缩小差距。最近一个W3C工作组正合力制定这一触摸事件规范。

在本文中,我会深入研究iOS和Android设备提供的触摸事件API,探索一下可以构建哪些类型的应用,给出一些最佳做法,并论及一些使得可触控应用(touch-enabled application)的开发变得更加容易的有用技术。

触摸事件


三种在规范中列出并获得跨移动设备广泛实现的基本触摸事件:

1. touchstart:手指放在一个DOM元素上。
2. touchmove:手指拖曳一个DOM元素。
3. touchend:手指从一个DOM元素上移开。

每个触摸事件都包括了三个触摸列表:

1. touches:当前位于屏幕上的所有手指的一个列表。
2. targetTouches:位于当前DOM元素上的手指的一个列表。
3. changedTouches:涉及当前事件的手指的一个列表。

例如,在一个touchend事件中,这就会是移开的手指。

这些列表由包含了触摸信息的对象组成:

1. identifier:一个数值,唯一标识触摸会话(touch session)中的当前手指。
2. target:DOM元素,是动作所针对的目标。
3. 客户/页面/屏幕坐标:动作在屏幕上发生的位置。
4. 半径坐标和 rotationAngle:画出大约相当于手指形状的椭圆形。

可触控应用


touchstart、touchmove和touchend事件提供了一组足够丰富的功能来支持几乎是任何类型的基于触摸的交互——其中包括常见的多点触摸手势,比如说捏缩放、旋转等待。

下面的这段代码让你使用单指触摸来四处拖曳一个DOM元素:

var obj = document.getElementById('id');
obj.addEventListener('touchmove', function(event) {
  // 如果这个元素的位置内只有一个手指的话
  if (event.targetTouches.length == 1) {
    var touch = event.targetTouches[0];
    // 把元素放在手指所在的位置
    obj.style.left = touch.pageX + 'px';
    obj.style.top = touch.pageY + 'px';
  }
}, false);

下面是一个示例,该例子显示了屏幕上当前所有的触点,它的作用就是用来感受一下设备的响应性。


// 设置画布并通过ctx变量来暴露上下文
canvas.addEventListener('touchmove', function(event) {
  for (var i = 0; i < event.touches.length; i++) {
    var touch = event.touches[i];
    ctx.beginPath();
    ctx.arc(touch.pageX, touch.pageY, 20, 0, 2*Math.PI, true);
    ctx.fill();
    ctx.stroke();
  }
}, false);

演示

到处都有着许多有意思的多点触摸演示,比如说这个由Paul Irish和其他人实现的基于画布的绘画演示。


    

还有Browser Ninja,一个技术演示,是一个使用了CSS3的转换、过渡和画布的Fruit Ninja克隆。

  

  

最佳做法


  

阻止缩放

缺省的多点触摸设置不是特别的好用,因为你的滑动和手势往往与浏览器的行为有关联,比如说滚动和缩放。

要禁用缩放功能的话,使用下面的元标记设置你的视图区(viewport),这样其对于用户来说就是不可伸缩的了:

  content="width=device-width, initial-scale=1.0, user-scalable=no">

看看这篇关于移动HTML 5的文章,了解更多关于视图区设置的信息。

阻止滚动

一些移动设备有缺省的touchmove行为,比如说经典的iOS overscroll效果,当滚动超出了内容的界限时就引发视图反弹。这种做法在许多多点触控应用中会带来混乱,但要禁用它很容易。

document.body.addEventListener('touchmove', function(event) {
  event.preventDefault();
}, false); 

细心渲染

如果你正在编写的多点触控应用涉及了复杂的多指手势的话,要小心地考虑如何响应触摸事件,因为一次要处理这么多的事情。考虑一下前面一节中的在屏幕上画出所有触点的例子,你可以在有触摸输入的时候就立刻进行绘制:

canvas.addEventListener('touchmove', function(event) {
  renderTouches(event.touches);
},

不过这一技术并不是要随着屏幕上的手指个数的增多而扩充,替代做法是,可以跟踪所有的手指,然后在一个循环中做渲染,这样可获得更好的性能:

var touches = []
canvas.addEventListener('touchmove', function(event) {
  touches = event.touches;
}, false);

// 设置一个每秒60帧的定时器
timer = setInterval(function() {
  renderTouches(touches);
}, 15);

提示:setInterval不太适合于动画,因为它没有考虑到浏览器自己的渲染循环。现代的桌面浏览器提供了requestAnimationFrame这一函数,基于性能和电池工作时间原因,这是一个更好的选择。一但浏览器提供了对该函数的支持,那将是首选的处理事情的方式。

使用targetTouches和changedTouches

要记住的一点是,event.touches是与屏幕接触的所有手指的一个数组,而不仅是位于目标DOM元素上的那些。你可能会发现使用 event.targetTouches和event.changedTouches来代替event.touches更有用一些。

最后一点,因为你是在为移动设备做开发,因此你应该要留心移动的最佳做法,这些在Eric Bidelman的文章中有论及,以及要了解这一W3C文档。

设备支持


遗憾的是,触摸事件的实现在完备性和质量方面的差别很大。我编写了一个诊断脚本来显示一些关于触摸API实现的基本信息,其中包括哪些事件是支持的,以及touchmove事件触发的解决方案。我在Nexus One和Nexus S硬件上测试了Android 2.3.3,在Xoom上测试了Android 3.0.1,以及在iPad和iPhone上测试了iOS 4.2。

简而言之,所有被测试的浏览器都支持touchstart、touchend和touchmove事件。

规范提供了额外的三个触摸事件,但被测试的浏览器没有支持它们:

1.  touchenter :移动的手指进入一个DOM元素。
2.  toucheleave :移动手指离开一个DOM元素。
3.  touchcancel :触摸被中断(实现规范)。

被测试的浏览器还在每个触摸列表内部都提供了touches、targetTouches和changedTouches列表。不过,被测试的浏览器没有支持 radiusX、radiusY或是rotationAngle属性,这些属性指明触摸屏幕的手指的形状。在一次touchmove期间,事件大约一秒钟触发60次,所有的被测试设备都是这样。

Android 2.3.3 (Nexus)

Android的Gingerbread浏览器(在Nexus One和Nexus S上测试)不支持多点触摸,这是一个已知的问题。

Android 3.0.1 (Xoom)

Xoom的浏览器对多点触摸有一个基本的支持,不过只能是在单个的DOM元素上起作用。浏览器不能正确响应同时发生在不同DOM元素上的两处触摸,换句话说,下面的代码会对两个同时发生的触摸的给出反应:

obj1.addEventListener('touchmove', function(event) {
  for (var i = 0; i < event.targetTouches; i++) {
    var touch = event.targetTouches[i];
    console.log('touched ' + touch.identifier);
  }
}, false);

但下面的代码则不会:

var objs = [obj1, obj2];
for (var i = 0; i < objs.length; i++) {
  var obj = objs[i];
  obj.addEventListener('touchmove', function(event) {
    if (event.targetTouches.length == 1) {
      console.log('touched ' + event.targetTouches[0].identifier);
    }
  }, false);
}

  

iOS 4.x (iPad, iPhone)

iOS设备完全支持多点触摸,能够跟踪多个手指,并在浏览器中提供一个非常敏感的触摸体验。

开发者工具


在移动开发中,一种较为容易的做法是,先在桌面上开始原型设计,然后再在打算要支持的设备上处理移动特有的部分。多点触摸正是难以在PC上进行测试的那些功能之一,因为大部分的PC都没有触摸输入。

不得不在移动设备上进行的测试有可能会拉长你的开发周期,因为你所做的每项改变都需要提交代码到服务器上,接着再加载到设备上。然后,一旦运行后,对应用也就没有太多的调试了,因为平板电脑和智能手机都很缺乏web开发者所用的工具。

这个问题的一个解决方案是在开发机器上模拟触发事件。对于单点触摸,触摸事件可以基于鼠标事件来模拟。如果你有触摸输入设备的话,比如说现代的App MacBook,那么多点触摸也可以被模拟。

单点触摸事件

如果你想在桌面上模拟单点触摸事件的话,试一下Phantom Limb,该程序在网页上模拟触摸事件并提供一只巨手来引导。

另外还有Touchable这一jQuery插件,该插件跨平台地统一了触摸和鼠标事件。

多点触摸事件

为了能够让你的多点触摸web应用在你的浏览器或是多点触摸控板(比如说Apple MacBook或是MagicPad)上起作用,我创建了这一个MagicTouch.js填充工具,其捕捉来自触控板的触摸事件,然后把它们转换成标准兼容的触摸事件。

1. 下载npTuioClient NPAPI插件并把它安装到~/Library/Internet Plug-Ins/目录下。

2. 下载这一Mac MagicPad的TongSeng TUIO应用并启动这一服务器。

3. 下载MagicTouch.js这一javascript库来基于npTuioClient回调模拟规范兼容的触摸事件。

4. 以如下方式把magictouch.js脚本和npTuioClient插件包含到你的应用中:

< head>
  ...
  < script src="/path/to/magictouch.js" kesrc="/path/to/magictouch.js">< /script>
< /head>

< body>
  ...
  < object id="tuio" type="application/x-tuio" style="width: 0px; height: 0px;">
    Touch input plugin failed to load!
  < /object>
< /body>

我只在Chrome 10上测试了这一方法,不过只要稍做调整它应该能够在其他的现代浏览器上工作。

如果你的计算机没有多点触摸输入的话,你可以使用其他的TUIO跟踪器,比如说reacTIVision来模拟触摸事件。欲了解更多信息,请参阅TUIO项目页面。

需要注意的一点是,你的手势可以是和OS层面的多点触摸手势相同的。在OS X上,你可以通过进入System Preferences中的Trackpad偏好设定版面来配置系统范围的事件。

随着多点触摸功能逐渐得到跨移动浏览器的的广泛支持,我非常高兴地看到新的web应用充分利用了这一丰富的API。

原文连接: http://select.yeeyan.org/view/213582/202991
Unity微信小游戏开发:如何精准禁用多点触控(附EventSystem解决方案) 本文针对Unity微信小游戏开发中,使用EventSystem时Input.multiTouchEnabled失效的问题,提供了深度解决方案。文章剖析了EventSystem与Input类两套输入体系并行的根源,并给出了精准的“单指事件过滤器”脚本实现,帮助开发者有效禁用特定UI元素的多点触控,确保拖拽等精细操作的稳定性。 阅读详情

相关推荐

Unity多点触控与实物交互开发:基于TUIO协议的完整实践方案

在交互式应用开发中,多点触控与实物交互是提升用户体验的关键技术。其核心原理在于通过标准化协议将硬件输入数据转化为程序可识别的事件,从而实现自然直观的人机交互。TUIO协议作为行业标准,解决了不同硬件厂商数据格式不统一的问题,为开发者提供了与硬件解耦的通信方案。在Unity引擎中整合TUIO,能够高效处理触摸点坐标、实物ID与角度等数据,并通过事件驱动架构将其转化为游戏对象的交互响应。这一技术对于博物馆、科技馆等场景的沉浸式互动项目具有重要价值,例如观众可通过手势旋转缩放天体模型,或使用实体卡片触发宇宙现象。

weixin_30786657的博客 414

移动互联网终端的touch事件,touchstart, touchend, touchmove

前言 如果我们允许用户在页面上用类似桌面浏览器鼠标手势的方式来控制WEB APP,这个页面上肯定是有很多可点击区域的,如果用户触摸到了那些可点击区域怎么办呢?? 诸如智能手机和平板电脑一类的移动设备通常会有一个电容式触摸屏(capacitive touch-sensitive screen),以捕捉用户的手指所做的交互。随着移动网络的发展,其能够支持越来越复杂的应用,web开发者需要一种方法...

leiyongping的专栏 732

大屏开发-第七篇:大屏开发常见问题与解决方案

在前端大屏开发过程中,兼容性问题、数据异常以及性能瓶颈等状况时常出现,这些问题会严重影响大屏的展示效果与使用体验。本文将针对大屏开发中的常见问题,提供详细的解决方案,助力开发者顺利完成大屏项目。

无 255

触屏Touch事件总结(touchstart、touchmove、touchend 区别和使用场景)

web开发过程遇到触屏适配,需要使用到touch相关一系列事件,以下是开发过程查询的资料总结,以及遇到问题和解决方案。

yqdid的博客 5132

touchtomouse.js:一个将触摸事件转换为鼠标事件JavaScript库

touchtomouse.js 一个将触摸事件转换为鼠标事件JavaScript库

博图HMI多语言文本列表一键生成攻略:从Excel模板到TIA Portal的完整流程

本文详细介绍了如何利用Excel模板和TIA Portal API实现博图HMI多语言文本列表的一键生成。通过标准化Excel模板设计、解析TIA Portal的XML结构,并结合C#代码实现自动化导入,大幅提升多语言项目的开发效率。特别适用于需要支持多语言版本的自动化设备HMI界面开发。

weixin_26934905的博客 218

移动端JS屏幕触摸事件Touch

随着移动互联的到来, 人们使用移动设备浏览网页的频率高了,我们平时在pc浏览器上用的事件,比如:click, mouseover等, 已经无法满足移动设备触摸屏的特点。 touch是移动端的触摸事件 而且是一组事件。 加粗样式 如何使用touch, 1.绑定事件:element.addEventListener(‘touchstart’,function () { }); 2.事件对象: Touc...

邪小新的博客 1万+

使用 ArxivLoader 从 arXiv 加载学术文献并实现高效文档处理

arXiv是一个开放获取的学术存储平台,涵盖了物理、数学、计算机科学等多个领域的 200 万篇学术论文。这些文献中包含了如逻辑推理、机器学习等热门领域的最新研究进展。通过使用 ArxivLoader,我们可以轻松地搜索和加载 arXiv 上的学术文献,并将其转换为文本以供分析或应用于下游任务,例如问答系统、摘要生成或知识图谱构建。有时我们并不需要完整的文献内容,而是只需要摘要用于快速预览。可以使用 get_summaries_as_docs()# 获取文献摘要# 查看第一篇摘要。

hgSdaegva的博客 888

「移动端」touch事件,touchEvent对象

随着智能手机普及,有越来越多的手机网页和网页版游戏,手机触摸、移动、旋转等等,多种操作。一般电脑的人机交互靠的是鼠标,而手机用的就是触摸。区别有: PC 端一个电脑只能有一个鼠标,而移动端有多点触摸。 PC 端添加效果使用 mouseup、mousedown、mousemove,而移动端使用的 touchstart、touchmove、touchend 。 一、touch事件类型 touchstart - 手指触摸屏幕,在元素上按下时触发 touchmove - 手指移动,在元素上按下之后屏幕上任意

前端人的博客 2800

堆内存管理核心逻辑 超详细复习笔记

本文详细解析了堆内存管理的核心逻辑,包括初始化、分配和释放三个关键环节。系统通过全局堆管理结构体和链表机制实现动态内存管理:初始化时标记整块内存为空闲;分配时遍历链表查找合适空闲块并进行分割;释放时定位内存块头并重新标记为空闲,支持相邻块合并以减少碎片。文章对比了链表式管理和线性分配的优缺点,指出链表式更灵活但实现复杂,线性分配简单但无法释放。最后总结了常见错误(如指针回推错误、碎片问题)和扩展知识(不同内存管理算法)。这套机制是理解嵌入式系统和RTOS内存管理的基础。

2502_92009732的博客 1201

对LSTM中每个batch都初始化隐含层的理解

不知道有没有人和我有一样疑惑 在LSTM相关的代码中,为什么每个batch都会将隐藏层重新初始化, 这样不会把以前训练出来的参数丢掉吗?? 比如 代码来自GitHub 看了一些解释是h与c是状态,不是参数,每个batch中都需要初始化为0,LSTM 中的参数是W,b。 网络中训练的是参数,不是状态。 说真的。。。当时我没怎么看懂。。。 咨询了实验室的师兄后,我有了自己的理解 产生误解的主要原因是我对RNN和LSTM的结构理解不深入,我们通常看到RNN结构图基本都是这样的 ...

Chauncey_Wang的博客 5910

针对多点触控浏览器进行的开发(转)

触摸事件 三种在规范中列出并获得跨移动设备广泛实现的基本触摸事件: 1. touchstart:手指放在一个DOM元素上。 2. touchmove:手指拖曳一个DOM元素。 3. touchend:手指从一个DOM元素上移开。 每个触摸事件都包括了三个触摸列表: 1. touches:当前位于屏幕上的所有手指的一个列表。 2. targetTouches:位于当前DOM元素上的...

weixin_33739523的博客 351

VisionMaster图像源配置全攻略:从本地图片到相机SDK的保姆级教程

本文详细解析了VisionMaster图像源配置的三种主流方式:本地图片、相机直连和SDK集成。从像素格式选择到工业相机触发控制,再到SDK开发实战,提供全面的技术指导和避坑建议,帮助开发者高效实现图像处理应用的部署与优化。

yhn45678901的博客 780

转:针对多点触控浏览器进行的开发

[url=http://select.yeeyan.org/view/213582/202991]针对多点触控浏览器进行的开发[/url] 在本文中,我会深入研究iOS和Android设备提供的触摸事件API,探索一下可以构建哪些类型的应用,给出一些最佳做法,并论及一些使得可触控应用(touch-enabled application)的开发变得更加容易的有用技术。 前言 诸如智能手...

kenmlee的博客 553

ISCC练习题MISC

解题技巧:看最后括号应该是IceCTF,先用了一键解码啥也没有啊,不对不对!好像是字符频率统计,转换网站:http://quipqiup.com/有人给你发了一串信息,你能解开吗?

m0_62737381的博客 1119

Quartus安装Altera USB-Blaster安装驱动程序出现问题(代码39)的解决办法

Quartus安装Altera USB-Blaster安装驱动程序出现问题(代码39)的解决办法

MCU_HOT的博客 1万+

[译文]针对多点触控浏览器进行的开发

在本文中,我会深入研究iOS和Android设备提供的触摸事件API,探索一下可以构建哪些类型的应用,给出一些最佳做法,并论及一些使得可触控应用(touch-enabled application)的开发变得更加容易的有用技术。   请点击这里 阅读具体内容。...

没有自信心的软件开发者 139

《大数据之路:阿里巴巴大数据实践》-第1篇 数据技术篇 -第3章数据同步

我们将数据釆集分为日志采集和数据库数据同步两 部分。数据同步技术更通用的含义是不同系统间的数据流转,有多种不 同的应用场景。主数据库与备份数据库之间的数据备份,以及主系统与 子系统之间的数据更新,属于同类型不同集群数据库之间的数据同步。 另外,还有不同地域、不同数据库类型之间的数据传输交换,比如分布 式业务系统与数据仓库系统之间的数据同步。对于大数据系统来说,包 含数据从业务系统同步进入数据仓库和数据从数据仓库同步进入数据 服务或数据应用两个方面。本章侧重讲解数据从业务系统同步进入数据 仓库这个环节,但其适

m0_54252387的博客 961

linux触摸屏两指缩放_你需要的移动端多点触控双指缩放

2020年12月01日 阅读 2452 关注你需要的移动端多点触控双指缩放作为前端切图仔,经常会和移动端打交道,对于移动端来说,存在多个接触点同时操作的情况,和双手缩放的问题,于是思考了一下,学习移动端开发手势的的知识,实现双指缩放。前言我们开发的PC页面,只能通过鼠标去点击,移动端页面,存在着多点触控的问题,我们经常会在移动端页面用手势去操作页面,放大和缩小的问题。大部分的移动设备(手机/ipa...

weixin_32641973的博客 1872

怀旧版电脑GBC模拟器

再现原版GBC掌机的界面,电脑运行连游戏界面都一样大小,很怀旧,很真实,(英文版)强烈推荐,很小的文件,很难才找到的。

android 蓝牙通讯demo

android 下蓝牙通讯demo,实现了发现蓝牙,使能蓝牙,通过蓝牙发送消息。

多点触屏浏览器的js开发

这篇文章讲到了很多关于手机触摸事件的知识,比如touchstart,touchmove,touchend,对于获取屏幕的左右跟网页版的也是不一样的哦。我以前也比较少接触这方面的知识,最近做一个项目才发现原来用event.pageX是获取不了当前的位置(在手机上)。需要用到var touch = event.originalEvent.touches[0]; 然后touch.pageX才可...

anyuma8815的博客 370

华为的C语言编程规范.pdf

华为技术有限公司内部技术规范。本规范制定了编写C语言程序的基本原则、规则和建议。从代码的清晰、简洁、可测试、安全、程序效率、可移植各个方面对C语言编程作出了具体指导。

浏览器标签页管理新思路:PinchTab手势交互原型开发实践

浏览器标签页管理是现代Web使用中的常见需求,其核心在于提升多任务处理效率与用户体验。传统方案如快捷键和插件虽能缓解问题,但在意图与执行间仍存在交互断层。手势交互作为一种更符合直觉的交互范式,通过模拟物理世界的直接操作(如捏合),有望弥合这一断层,其技术价值在于降低认知负荷、提升操作流畅度。在工程实践中,这通常涉及对浏览器扩展API的深度利用,例如Manifest V3、tabs API和scripting API的协同工作。本文以“PinchTab”这一概念为例,探讨如何通过鼠标框选模拟捏合手势,构建一个

靓靓软件工作室 443

WINCC7.3破解文件

WINCC7.3硬件够破解文件,有需要的下载!WINCC7.3硬件够破解文件,有需要的下载!

上一篇: 深入了解iPad上的MouseEvent
下一篇: 移动端touch事件获取clientX, clientY
FuDesign2008
博客等级 码龄18年 44粉丝 119原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值