一 、iOS下 移动端多指事件包括:
1、 gesturestart
手指触碰当前元素,屏幕上有两个或者两个以上的手指
注意:我们说的多指,指定是两个手指
2 、gesturechange
手指触碰当前元素,屏幕上有两个或者两个以上的手指位置在发生移动
3 、gestureend
在gesturestart后, 屏幕上只剩下两根以下(不包括两根)的手指
注意:手指列表:(全部为数组,返回值为长度length)
changedTouches:目标元素上的目标事件
targetTouches:目标元素的手指列表
touches:屏幕上的手指列表
二 、旋转和缩放
scale:event.scale 缩放比例的计算是 初始值 * 比值 。初始值一般为1
注意:根据我们的生理极限,不允许出现负值;
transforemCss(box,"translateZ",0); //设置z轴清除 transform在执行的时候残影问题
rotation :event.rotation 角度计算= 现在的角度 -开始时的角度。初始值一般为0注意:手指旋转的角度,一般只考虑0-90度;
一般指手指放在元素上进行缩放
三 、思维导图
注:
1 Android下模拟多指事件
var callback = { start:function(){ box.style.background = 'pink' }, change:function(){ box.innerHTML += 'change<br />' }, end:function(){ box.style.background = 'yellow'; box.innerHTML = ''; } } //功能部分 gesture(box,callback); function gesture(node,callback){ //gesturestart是否执行 var flag = false; //gesturestart 手指触碰当前元素,屏幕上有两个或者两个以上的手指 node.addEventListener('touchstart',function(event){ var touch = event.touches; if(touch.length >= 2){ //进入多指事件,flag变为true flag = true; //gesturestart //如果callback存在 ,且start类型为函数,执行callback['start'](); if(callback && typeof callback['start']== 'function'){ callback['start'](); }; }; }) //gesturechange 手指触碰当前元素,屏幕上有两个或者两个以上的手指位置在发生移动 node.addEventListener('touchmove',function(event){ var touch = event.touches; if(touch.length >= 2){ //gesturechange if(callback && typeof callback['change'] == 'function'){ callback['change'](); } } }); //gestureend 在gesturestart后, 屏幕上只剩下两根以下(不包括两根)的手指 node.addEventListener('touchend',function(event){ var touch = event.touches; if(flag){ if(touch.length < 2){ //gestureend if(callback && typeof callback['end']=='function'){ callback['end'](); } } }; //重置 flag = false; }) }
2 缩放、旋转 的实现
(function(win){ win.gesture = function (node,callback){ //gesturestart是否执行 var flag = false; //线段1 var startC = 0; //∠1 var startD = 0; //gesturestart 手指触碰当前元素,屏幕上有两个或者两个以上的手指 node.addEventListener('touchstart',function(event){ var touch = event.touches; if(touch.length >= 2){ flag = true; //event.touches[0].clientX //求线段、角度 startC = getC(touch[0],touch[1]); startD = getD(touch[0],touch[1]); //gesturestart if(callback && typeof callback['start']== 'function'){ callback['start'](); }; }; }) //gesturechange 手指触碰当前元素,屏幕上有两个或者两个以上的手指位置在发生移动 node.addEventListener('touchmove',function(event){ var touch = event.touches; if(touch.length >= 2){ //gesturechange //线段 var nowC = getC(touch[0],touch[1]); //缩放比例 event.scale = nowC/startC; //角 var nowD = getD(touch[0],touch[1]); //旋转角度=现在的值-开始的值 event.rotation = nowD - startD; if(callback && typeof callback['change'] == 'function'){ callback['change'](event); } } }); //gestureend 在gesturestart后, 屏幕上只剩下两根以下(不包括两根)的手指 node.addEventListener('touchend',function(event){ var touch = event.touches; if(flag){ if(touch.length < 2){ //gestureend if(callback && typeof callback['end']=='function'){ callback['end'](); } } }; //重置 flag = false; }) } //求线段距离 win.getC = function (p1,p2){ var a = p1.clientX - p2.clientX; var b = p1.clientY - p2.clientY; //Math.sqrt() 开根号 var c = Math.sqrt(a*a + b*b); return c; } //求角度 win.getD = function (p1,p2){ var y = p1.clientY - p2.clientY; var x = p1.clientX - p2.clientX; var deg = Math.atan2(y,x); //弧度转角度 deg = deg*180/Math.PI; return deg; } })(window);