iOS下 移动端多指事件

一 、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);

猜你喜欢

转载自blog.csdn.net/xzz2222/article/details/80290533
今日推荐