博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
手机触屏的js事件
阅读量:6655 次
发布时间:2019-06-25

本文共 5711 字,大约阅读时间需要 19 分钟。

处理Touch事件能让你跟踪用户的每一根手指的位置。你可以绑定以下四种Touch事件:
    1.touchstart:  // 手指放到屏幕上的时候触发 
    2.touchmove:  // 手指在屏幕上移动的时候触发 
    3.touchend:  // 手指从屏幕上拿起的时候触发 
    4touchcancel:  // 系统取消touch事件的时候触发。至于系统什么时候会取消,不详
属性
    1.client / clientY:// 触摸点相对于浏览器窗口viewport的位置 
    2.pageX / pageY:// 触摸点相对于页面的位置 
    3.screenX /screenY:// 触摸点相对于屏幕的位置 
    4.identifier: // touch对象的unique ID 
 
//touchstart事件  
function touchSatrtFunc(e) {  
    //evt.preventDefault(); //阻止触摸时浏览器的缩放、滚动条滚动等  
    var touch = e.touches[0]; //获取第一个触点  
    var x = Number(touch.pageX); //页面触点X坐标  
    var y = Number(touch.pageY); //页面触点Y坐标  
    //记录触点初始位置  
    startX = x;  
    startY = y;  
}  
//touchmove事件 
function touchMoveFunc(e) {  
    //evt.preventDefault(); //阻止触摸时浏览器的缩放、滚动条滚动等  
    var touch = evt.touches[0]; //获取第一个触点  
    var x = Number(touch.pageX); //页面触点X坐标  
    var y = Number(touch.pageY); //页面触点Y坐标  
    var text = 'TouchMove事件触发:(' + x + ', ' + y + ')';  
    //判断滑动方向  
    if (x - startX != 0) {  
        //左右滑动  
    }  
    if (y - startY != 0) {  
        //上下滑动  
    }  
}  
 
 
一、手机上的触摸事件
 
基本事件:
 
touchstart   //手指刚接触屏幕时触发
touchmove    //手指在屏幕上移动时触发
touchend     //手指从屏幕上移开时触发
 
下面这个比较少用:
touchcancel  //触摸过程被系统取消时触发
每个事件都有以下列表,比如touchend的targetTouches当然是 0 咯:
 
touches         //位于屏幕上的所有手指的列表
targetTouches   //位于该元素上的所有手指的列表
changedTouches  //涉及当前事件的所有手指的列表
 

我们来看几个关键的地方:

changedTouches/touches/targetTouches

touches:为屏幕上所有手指的信息

PS:因为手机屏幕支持多点触屏,所以这里的参数就与手机有所不同

targetTouches:手指在目标区域的手指信息

changedTouches:最近一次触发该事件的手指信息

比如两个手指同时触发事件,2个手指都在区域内,则容量为2,如果是先后离开的的话,就会先触发一次再触发一次,这里的length就是1,只统计最新的

PS:一般changedTouches的length都是1

touchend时,touches与targetTouches信息会被删除,changedTouches保存的最后一次的信息,最好用于计算手指信息

这里要使用哪个数据各位自己看着办吧,我也不是十分清晰(我这里还是使用changedTouches吧)

 
复制代码
其中坐标常用pageX,pageY:
pageX    //相对于页面的 X 坐标
pageY    //相对于页面的 Y 坐标
clientX  //相对于视区的 X 坐标
clientY  //相对于视区的 Y 坐标
screenX  //相对于屏幕的 X 坐标
screenY  //相对于屏幕的 Y 坐标
 
identifier // 当前触摸点的惟一编号
target   //手指所触摸的 DOM 元素
复制代码
其他相关事件:
 
event.preventDefault()   //阻止触摸时 的缩放、滚动条滚动
var supportTouch = "createTouch" in document  //判断是否支持触摸事件
更多深入内容?点击:http://www.cesclub.com/bw/jishuzhongxin/Webjishu/2011/1216/18069.
 
 
 
二、示例
 
以下是获取不同类型滑动的代码具体做法,结合前人的思想,封装好了,可以借鉴学习:
 
1 var touchFunc = function(obj,type,func) { 2     //滑动范围在5x5内则做点击处理,s是开始,e是结束 3     var init = {x:5,y:5,sx:0,sy:0,ex:0,ey:0}; 4     var sTime = 0, eTime = 0; 5     type = type.toLowerCase(); 6   7     obj.addEventListener("touchstart",function(){ 8         sTime = new Date().getTime(); 9         init.sx = event.targetTouches[0].pageX;10         init.sy = event.targetTouches[0].pageY;11         init.ex = init.sx;12         init.ey = init.sy;13         if(type.indexOf("start") != -1) func();14     }, false);15  16     obj.addEventListener("touchmove",function() {17         event.preventDefault();//阻止触摸时浏览器的缩放、滚动条滚动18         init.ex = event.targetTouches[0].pageX;19         init.ey = event.targetTouches[0].pageY;20         if(type.indexOf("move")!=-1) func();21     }, false);22  23     obj.addEventListener("touchend",function() {24         var changeX = init.sx - init.ex;25         var changeY = init.sy - init.ey;26         if(Math.abs(changeX)>Math.abs(changeY)&&Math.abs(changeY)>init.y) {27             //左右事件28             if(changeX > 0) {29                 if(type.indexOf("left")!=-1) func();30             }else{31                 if(type.indexOf("right")!=-1) func();32             }33         }34         else if(Math.abs(changeY)>Math.abs(changeX)&&Math.abs(changeX)>init.x){35             //上下事件36             if(changeY > 0) {37                 if(type.indexOf("top")!=-1) func();38             }else{39                 if(type.indexOf("down")!=-1) func();40             }41         }42         else if(Math.abs(changeX)
300) {46 if(type.indexOf("long")!=-1) func(); //长按47 }48 else {49 if(type.indexOf("click")!=-1) func(); //当点击处理50 }51 }52 if(type.indexOf("end")!=-1) func();53 }, false);54 };

 

完整的触控事件

1 //捕获手势事件(与捕捉鼠标事件是一样的,只需要添加一个监听器就好了)====添加一个事件监听addEventListener 2 /** 3 *在document下面监听touchstart和touchend这两个事件 4 *touches[]是一个数组,多点触控,此处只需要在2048中采用单点触控即可 5 * 6 */ 7 var startx=0,starty=0,endx = 0,endy = 0; 8 document.addEventListener('touchstart',function(event){ 9     startx = event.touches[0].pageX;//获取屏幕X的位置;10     starty = event.touches[0].pageY;11 });12 document.addEventListener('touchmove',function(event){13     event.preventDefault();//阻止触摸时浏览器的缩放,滚动条滚动14 });15 document.addEventListener('touchend',function(event){16     endx = event.changedTouches[0].pageX;17     endy = event.changedTouches[0].pageY;18 19     //声明两个变量来保存向量20     var subx = endx-startx;21     var suby = endy-starty;22     if (Math.abs(subx)<0.3*documentWidth && Math.abs(suby)<0.3*documentWidth) {23         return;//处理小范围滑动,不操作,即容错处理24     };25     //触控事件的逻辑===上滑,下滑,左滑,右滑;26     /*27     *注意:在移动手机端中,纵坐标向下为正。28     */29     if (Math.abs(subx)>=Math.abs(suby)) {30         //横坐标移动范围比纵坐标移动范围广31         if (subx>0) {32             //右滑33             if (moveRight()) {34                 setTimeout("generateOneNumber()",210);35                 setTimeout("isgameover()",300);36             };37         } else{38             //左滑39             if (moveLeft()) {40                 setTimeout("generateOneNumber()",210);41                 setTimeout("isgameover()",300);42             };43         };44     } else{
//纵坐标移动范围比横坐标移动范围广45 if (suby>0) {46 //下滑47 if (moveDown()) {48 setTimeout("generateOneNumber()",210);49 setTimeout("isgameover()",300);50 };51 } else{52 //上滑53 if (moveUp()) {54 setTimeout("generateOneNumber()",210);55 setTimeout("isgameover()",300);56 };57 };58 };59 60 });

 

转载于:https://www.cnblogs.com/xs-yqz/p/4620634.html

你可能感兴趣的文章
GitHub Desktop for Win 安装不上
查看>>
SpringMVC中使用Interceptor拦截器
查看>>
20135220谈愈敏Linux_总结
查看>>
Windows Phone 7(WP7)开发 AutoCompletedBox制作中文城市名称输入框
查看>>
vue echarts 实现地图大气泡图
查看>>
机器学习经典算法详解及Python实现--基于SMO的SVM分类器
查看>>
TF-IDF与余弦相似性的应用(一):自动提取关键词
查看>>
ZOJ 2974 Just Pour the Water
查看>>
CodeVS 1045 回文数
查看>>
深度学习003:LeNet-5网络研究,并用keras框架复现、pytorch框架复现
查看>>
2018网易有道暑期实习笔试题
查看>>
ALGO_53(蓝桥杯) 最小乘积
查看>>
bloom, Fake HDR, True HDR(转)
查看>>
【转】MySQL的各种timeout
查看>>
CString,string,char*,比较
查看>>
C#中Collection,List和ArrayList的区别
查看>>
web.py框架之高级应用
查看>>
操作一个虚拟鼠标
查看>>
如何自动以管理员身份运行.NET程序?
查看>>
IOS UTI统一类型标识符:判断文件类型通过后缀
查看>>