HTML5的触摸API支持处理单点和多点的触摸事件处理。

接口

1、TouchEvent:代表了一个触摸事件。

主要属性:

TouchEvent.changedTouches:一个TouchList对象。代表了所有上一个接触点到当前点状态发生变化的点。

TouchEvent.touches:一个TouchList对象。代表的所有当前触摸点,不管目标或者状态是否改变。

TouchEvent.type:触摸事件类型。有touchstart、touchend、touchmove、touchenter、touchleave和touchleave。

2、Touch:代表一个单独的触摸点。

主要属性:Touch.identifier:这个触摸对象的唯一标识。

3、TouchList:代表一组触摸点。比如同时有多根手指放在在屏幕上面。

4、DocumentTouch:包含创建Touch和TouchList对象的方法。

触摸事件

  1. touchstart:触摸的时候发生。

  2. touchend:手指从屏幕抬起时发生。手指划出了屏幕也会触发这个事件。

  3. touchmove:手指沿着屏幕滑动时触发。

  4. touchenter:触摸点进入到一个元素。

  5. touchleave:触摸点离开一个元素。

  6. touchcancel:当触摸受到干扰而中断时触发。比如一个弹框,或者触摸点离开了文档窗口区域到了其他地方,或者触摸点超出了最大可支持的上限,那么最先的触摸将会退出。

下面一个跟踪多点触控的例子,允许用户同时多于一个手指画线,可以直接运行:

<!DOCTYPE html>
<html><head><title>Touch Test</title></head><body><canvas id="canvas" width="600" height="600" style="border:solid black 1px;">Your browser does not support canvas element.</canvas><br><br>Log: <pre id="log" style="border: 1px solid #ccc;"></pre><script type="text/javascript">document.body.onload = startup; //文档加载完毕触发var ongoingTouches = new Array(); //用来保存跟踪正在发送的触摸事件//设置事件处理程序function startup() {var el = document.getElementsByTagName("canvas")[0];el.addEventListener("touchstart", handleStart, false);el.addEventListener("touchend", handleEnd, false);el.addEventListener("touchcancel", handleCancel, false);el.addEventListener("touchleave", handleEnd, false);el.addEventListener("touchmove", handleMove, false);log("initialized.");}//处理触摸开始事件function handleStart(evt) {evt.preventDefault(); //阻止事件的默认行为log("touchstart.");var el = document.getElementsByTagName("canvas")[0];var ctx = el.getContext("2d");var touches = evt.changedTouches;for (var i=0; i < touches.length; i++) {log("touchstart:"+i+"...");ongoingTouches.push(copyTouch(touches[i]));var color = colorForTouch(touches[i]);ctx.beginPath();ctx.arc(touches[i].pageX, touches[i].pageY, 4, 0,2*Math.PI, false);  // a circle at the startctx.fillStyle = color;ctx.fill();log("touchstart:"+i+".");}}//处理触摸移动事件function handleMove(evt) {evt.preventDefault();var el = document.getElementsByTagName("canvas")[0];var ctx = el.getContext("2d");var touches = evt.changedTouches;for (var i=0; i < touches.length; i++) {var color = colorForTouch(touches[i]);var idx = ongoingTouchIndexById(touches[i].identifier);if(idx >= 0) {log("continuing touch "+idx);ctx.beginPath();log("ctx.moveTo("+ongoingTouches[idx].pageX+", "+ongoingTouches[idx].pageY+");");ctx.moveTo(ongoingTouches[idx].pageX, ongoingTouches[idx].pageY);log("ctx.lineTo("+touches[i].pageX+", "+touches[i].pageY+");");ctx.lineTo(touches[i].pageX, touches[i].pageY);ctx.lineWidth = 4;ctx.strokeStyle = color;ctx.stroke();ongoingTouches.splice(idx, 1, copyTouch(touches[i]));  // swap in the new touch recordlog(".");} else {log("can't figure out which touch to continue");}}}//处理触摸结束事件function handleEnd(evt) {evt.preventDefault();log("touchend/touchleave.");var el = document.getElementsByTagName("canvas")[0];var ctx = el.getContext("2d");var touches = evt.changedTouches;for (var i=0; i < touches.length; i++) {var color = colorForTouch(touches[i]);var idx = ongoingTouchIndexById(touches[i].identifier);if(idx >= 0) {ctx.lineWidth = 4;ctx.fillStyle = color;ctx.beginPath();ctx.moveTo(ongoingTouches[idx].pageX, ongoingTouches[idx].pageY);ctx.lineTo(touches[i].pageX, touches[i].pageY);ctx.fillRect(touches[i].pageX-4, touches[i].pageY-4, 8, 8);  // and a square at the endongoingTouches.splice(idx, 1);  // remove it; we're done} else {log("can't figure out which touch to end");}}}//处理触摸对出事件function handleCancel(evt) {evt.preventDefault();log("touchcancel.");var touches = evt.changedTouches;for (var i=0; i < touches.length; i++) {ongoingTouches.splice(i, 1);  // remove it; we're done}}//选择颜色function colorForTouch(touch) {var r = touch.identifier % 16;var g = Math.floor(touch.identifier / 3) % 16;var b = Math.floor(touch.identifier / 7) % 16;r = r.toString(16); // make it a hex digitg = g.toString(16); // make it a hex digitb = b.toString(16); // make it a hex digitvar color = "#" + r + g + b;log("color for touch with identifier " + touch.identifier + " = " + color);return color;}//拷贝一个触摸对象function copyTouch(touch) {return { identifier: touch.identifier, pageX: touch.pageX, pageY: touch.pageY };}//找出正在进行的触摸function ongoingTouchIndexById(idToFind) {for (var i=0; i < ongoingTouches.length; i++) {var id = ongoingTouches[i].identifier;if (id == idToFind) {return i;}}return -1;    // not found}//记录日志function log(msg) {var p = document.getElementById('log');p.innerHTML = msg + "\n" + p.innerHTML;}</script></body>
</html>

文章参考地址及示例来源: https://developer.mozilla.org/en-US/docs/Web/Guide/Events/Touch_events

HTML5触摸事件(多点触控、单点触控)Demo相关推荐

  1. 手机html5 tap事件,HTML5触摸事件演化tap事件介绍

    触摸事件是移动浏览器特有的HTML5事件,虽然click事件在pc和移动端更通用,但是在移动端会出现300ms延迟,较为影响用户体验,300ms延迟来自判断双击和长按,因为只有默认等待时间结束以确定没 ...

  2. html5里可移动线性进度条的类型怎么表示,HTML5触摸事件实现移动端简易进度条的实现方法...

    这篇文章主要介绍了关于HTML5触摸事件实现移动端简易进度条的实现方法,有着一定的参考价值,现在分享给大家,有需要的朋友可以参考一下 前言 HTML中新添加了许多新的事件,但由于兼容性的问题,许多事件 ...

  3. php 判断html5,html5触摸事件判断滑动方向的实现

    这篇文章主要介绍了html5触摸事件判断滑动方向的实现的相关资料,小编觉得挺不错的,现在分享给大家,也给大家做个参考. 为了给触摸界面提供有力支持, 触摸事件提供了响应用户对触摸屏或者触摸板上操作的能 ...

  4. HTML5触摸事件(多点、单点触控)

    本文转自:http://www.360us.net/article/9.html HTML5的触摸API支持处理单点和多点的触摸事件处理. 接口 1.TouchEvent:代表了一个触摸事件. 主要属 ...

  5. HTML5触摸事件演化tap事件

    触摸事件是移动浏览器特有的HTML5事件,虽然click事件在pc和移动端更通用,但是在移动端会出现300ms延迟,较为影响用户体验,300ms延迟来自判断双击和长按,因为只有默认等待时间结束以确定没 ...

  6. HTML5触摸事件(touchstart、touchmove和touchend)

    HTML5中新添加了很多事件,但是由于他们的兼容问题不是很理想,应用实战性不是太强,所以在这里基本省略,咱们只分享应用广泛兼容不错的事件,日后随着兼容情况提升以后再陆续添加分享.今天为大家介绍的事件主 ...

  7. html5触摸事件判断滑动方向,H5触摸事件中如何判断用户滑动方向

    这次给大家带来H5触摸事件中如何判断用户滑动方向,H5触摸事件中判断用户滑动方向的注意事项有哪些,下面就是实战案例,一起来看一下. 接口 TouchEvent TouchEvent 是一类描述手指在触 ...

  8. android 单点跟长按的区别,单点触控和多点触控区别是什么?原理分析

    描述 导语:触屏手机.平板电脑等新型的智能设备的崛起,除了因为像安卓和ios这样的智能系统诞生的原因外,不可或缺的一个条件就是触摸屏幕的更新换代和多点触控技术的出现.下面我们就来介绍单点触控和多点触控 ...

  9. html5 触摸 滚动,html5的触摸事件

    1.触摸事件有哪些 touchstart,touchmove,touchend 2.分别什么时候触发 touchstart事件:当手指触摸屏幕时候触发,即使已经有一个手指放在屏幕上也会触发. touc ...

最新文章

  1. linux 瞬间文件数没了,关于linux:如何快速汇总文件中的所有数字?
  2. 瑞星:ATM出现漏洞 银行:哪有这回事?
  3. java url特殊字符处理_简单实例处理url特殊符号处理(2种方法)
  4. leetcode349. 两个数组的交集(思路+详解)
  5. nemesis什么车_狂野飙车9TrionNemesis介绍 S级车Trion复仇女神属性详解
  6. 双非本科上岸北大,复试成绩专业第一!
  7. 某IDC科技风登录页面模板
  8. VirtualBox下安装MacOS11
  9. 动画函数,为任意一个元素移动到指定的目标位置
  10. Android架构初探
  11. 从华为“流程与IT管理部”看IT部门定位
  12. 【ThinkPHP5.0RC2吃螃蟹之】关于ThinkPHP5.0的渲染模板输出
  13. 前端开发者必会的英语单词
  14. cd linux给u盘安装程序,CDLINUX U盘安装教程
  15. 完整流程 Flutter 集成 Rust 多语言跨端开发基础案例
  16. shell - 在文本中的前一行或后一行添加一行内容,指定行前后增加一行内容
  17. JSPServlet中request.getParameter() 和request.getAttribute() 区别
  18. 齐鲁工业大学计算机科学与技术学院院长,齐鲁工业大学计算机科学与技术学院导师教师师资介绍简介-翟翌...
  19. 写论文经常用到的网站、工具、技巧汇总【持续更新】
  20. matlab的lb ub,多目标规划matlab程序实现

热门文章

  1. 基于FPGA的电子万年历设计
  2. 短信平台API接口demo示例-Node/SMS/Send
  3. 阿里云和华为云各自的优势
  4. java做橡皮擦效果_顶风作案,html5 canvas实现橡皮擦功能,擦了就知道有惊喜了...
  5. centos通过nmcli设置静态ip及设置开机自动连接
  6. c语言双重性,C语言双重循环应用初探
  7. 基于ssm的养老智慧服务平台毕业设计源码071526
  8. PyTorch1.12 亮点一览 | DataPipe + TorchArrow 新的数据加载与处理范式
  9. 解决火狐浏览器提示连接不安全或证书错误的问题
  10. SQL注入-验证码处理