移动开发基础(二)-touch事件

手机上的大部分交互都是通过touch来实现的,于是,对于触屏的交互式网站,触摸事件是相当重要的。

先了解一些规范

手指触摸屏幕可以触发的几个事件

 touchstart:触摸开始的时候触发

 touchmove:手指在屏幕上滑动的时候触发

 touchend:触摸结束的时候触发

每一个触摸事件都会产生一个触摸事件对象,对象包含的公共事件属性(他们都是TouchList类型的对象里面装着Touch对象),而每个触摸事件都包括了三个触摸列表,每个列表里包含了对应的一系列触摸点(用来实现多点触控):

touches:当前位于屏幕上的所有手指的列表。

targetTouches:位于当前DOM元素上手指的列表。

changedTouches:涉及当前事件手指的列表。

每个触摸点由包含了如下触摸信息(常用):

identifier:一个数值,唯一标识触摸会话(touch session)中的当前手指。一般为从0开始的流水号(android4.1,uc)

target:DOM元素,是动作所针对的目标。

pageX/pageX/clientX/clientY/screenX/screenY一个数值,动作在屏幕上发生的位置(page包含滚动距离,client不包含滚动距离,screen则以屏幕为基准)。 

radiusX/radiusY/rotationAngle:画出大约相当于手指形状的椭圆形,分别为椭圆形的两个半径和旋转角度。

现在来一个小实例

 1  var spots={},touches,timer;
 2       document.addEventListener(‘touchstart‘,function(e){
 3           e.preventDefault();
 4           [].forEach.call(e.targetTouches,function(touch){
 5               //如果已经有了小光点,直接离开
 6                 if(spots[touch.identifier]){
 7                     return;
 8                 }
 9                 var spot=spots[touch.identifier]=document.createElement(‘div‘);
10                 spot.classList.add(‘spot‘);
11                 spot.style.top=touch.pageY-35;
12                 spot.style.left=touch.pageX-35;
13                 document.body.appendChild(spot);
14           })
15       },false);
16       document.addEventListener(‘touchmove‘,function(e){
17           e.preventDefault();
18           touches=e.touches;
19           timer=setInterval(function(){
20             renderTouches(touches);
21        },16)
22       });
23       function renderTouches(touches){
24           if(!touches){
25               return;
26           };
27           [].forEach.call(touches,function(touch){
28               var spot=spots[touch.identifier]
29               if(spot){
30                   spot.style.top=touch.pageY-35;
31                   spot.style.left=touch.pageX-35;
32               }
33           })
34       }
35      document.addEventListener(‘touchend‘,function(e){
36
37          e.preventDefault();
38          [].forEach.call(e.changedTouches,function(touch){
39              var spot=spots[touch.identifier]
40              if(spot){
41                  document.body.removeChild(spot);
42                  delete spots[touch.identifier];
43              }
44          })
45          if(e.changedTouches.length==0){
46              clearInterval(timer);
47          }
48      })

css代码

 1   body{
 2              color:white;
 3              background-color: #222;
 4          }
 5          .spot{
 6              position: absolute;
 7              width:70px;
 8              height:70px;
 9              border-radius: 35px;
10              box-shadow: 0px 0px 40px #fff;
11              background-color: #fff;
12              opacity: .7;
13          }

实现的效果是点击触摸屏时出现一个小圆点,小圆点随着手移动。

时间: 2024-08-10 15:10:20

移动开发基础(二)-touch事件的相关文章

蓝鸥Unity开发基础二——课时6 方法

蓝鸥Unity开发基础二--课时6 方法 推荐视频讲师博客:http://11165165.blog.51cto.com/ 对象.方法名(实际参数); Person p=new Person(); P.Say(); 1.带有参数的方法举例 using System; namespace Lesson_06{    class MainClass    {        public class Car{        //l跑        //访问说明符  返回值类型 方法名(参数列表){语句

蓝鸥Unity开发基础二——课时3 访问修饰符

[蓝鸥Unity开发基础二]课时3 访问修饰符 一.访问修饰符 public --公共的,在哪里都能用 private  --私有的,只能够在当前机构体重使用,其他任何地方都不能 访问修饰符举例说明 using System; namespace Lesson_03{           struct Point2{        //public--公共的,在哪里都能用        public float x;        //private  --私有的,只能够在当前机构体重使用,其他

蓝鸥Unity开发基础—— 二维数组学习笔记

蓝鸥Unity开发基础-- 二维数组学习笔记 一.二维数组 有两个下标的数组叫做二维数组 类似[,]数组名=new类型[常量表达式1,常量表达式2] int[,] numbers= new int[2,3]; [0,0] [0,1] [0,2] [1,0] [1,1] [1,2] 举例说明 using System; namespace Lesson16{    class MainClass    {        public static void Main (string[] args)

javascript移动设备Web开发中对touch事件的封装实例

在触屏设备上,一些比较基础的手势都需要通过对 touch 事件进行二次封装才能实现.zepto 是移动端上使用率比较高的一个类库,但是其 touch 模块模拟出来的一些事件存在一些兼容性问题,如 tap 事件在某些安卓设备上存在事件穿透的 bug,其他类型的事件也或多或少的存在一些兼容性问题. 于是乎,干脆自己动手对这些常用的手势事件进行了封装,由于没有太多真实的设备来进行测试,可能存在一些兼容性问题,下面的代码也只是在 iOS 7.Andorid 4 上的一些比较常见的浏览器中测试通过. ta

蓝鸥Unity开发基础二——课时27 事件

事件 Event和delegate的关系就好像字段和属性的关系 Event会限制delegate不能够直接赋值操作,防止将委托替换掉,只能使用+=和-=来绑定或者解除绑定 Event还限定了delegate只能在定义的类中被调用 推荐视频讲师博客:http://11165165.blog.51cto.com/ using System; namespace Lesson_27{    public  delegate void  Something(string  name); public  

第十五章:Python の Web开发基础(二)

本課主題 JavaScript 介绍 DOM 介绍 jQuery 介绍 JavaScript 介绍 JavaScript 是一门编程语言,它可以让网页动起来的,JavaScript 的变量有两种,一个是局部变量:一个是全区变量.怎么分啦? a = 123; // 全区变量 var a = 123; // 局部变量 JavaScript 的数据类型 JavaScript 的数字类型 parseInt: y = "111" "111" r2 = parseInt(y)

蓝鸥Unity开发基础二——课时21 泛型

本节课我们来学习C#中的泛型,泛型是一个特殊的类型,它可以最大限度的重用我们的代码! 推荐视频讲师博客:http://11165165.blog.51cto.com/ 使用泛型能够最大限度的重用代码,保护类型安全,提高性能 泛型成员因为类型的不确定性,不能使用算术运算符,比较运算符 类型参数可以有多个,可以是编译器能够识别的任何类型 类型参数的名字不能够随便起,不能重名 一.数组类Array using System; namespace Lesson_21{    //数组类Array    

蓝鸥Unity开发基础二——课时22 ArrayList

一.ArrayList 集合:集合是种容器,在程序中,使用集合管理相关对象组 集合分为非泛型集合和泛型集合 推荐视频讲师博客:http://11165165.blog.51cto.com/ 二.非泛型集合:使用非泛型集合需要引起命名空间System.Collections ArrayList--可以根据需要动态增加的数组 Hashtable--用来存储键值对的哈希表 Queue--遵循先进先出的对列 Stack--遵循后进先出的栈 三.泛型集合:使用泛型集合需要引入命名空间System.Coll

蓝鸥Unity开发基础二——课时5 字段

推荐视频讲师博客:http://11165165.blog.51cto.com/ 一.字段 我们用字段描述类的特征 Class Person{ Public string name; Public int age; } 字段的举例说明 using System; namespace Lesson_05{ public class Person{        //字段--用来描述类中的特种        //在类中,可以给字段设置初始值        public  string  name;/

蓝鸥Unity开发基础二——课时15 封装和继承

封装 封装是实现面向对象程序设计的第一步 封装就是讲数据.方法等集合在一个个单元中,我们称之为类 封装的意义在于保护代码/数据,屏蔽复杂性 一.封装能够保护代码,数据安全性+封装可以屏蔽复杂性 using System; namespace Lesson_15{    public  class A{    public  void Open(){                    Console.WriteLine ("打开");            }    }