mui封装点击位置出现按钮

Others 2017-08-25 07:59:29 2017-08-25 07:59:29 2562 次浏览

html内容:


<!DOCTYPE html>
<html>
<head>
    <meta charset="utf-8">
    <meta name="viewport" content="width=device-width,initial-scale=1,minimum-scale=1,maximum-scale=1,user-scalable=no" />
    <title></title>
    <script src="js/mui.min.js"></script>
    <link href="css/mui.min.css" rel="stylesheet"/>
    <script type="text/javascript" src="js/chajian.js">
    	
&lt;/script&gt;
&lt;script type="text/javascript" charset="utf-8"&gt;
  	mui.init({

gestureConfig:{ tap: true, //默认为true doubletap: true, //默认为false longtap: true, //默认为false swipe: true, //默认为true drag: true, //默认为true hold:false,//默认为false,不监听 release:false//默认为false,不监听 } }); </script> </head> <body> <div id="aa"> </div> </body> <script type="text/javascript"> window.onload=function(){ var item=[ //这是创建菜单,url是链接,title是列表内容 { "url1":"http://lininn.cn", "title":"lining" }, { "url1":"http://ningli.win", "title":"music" },{ "url1":"http://ningli.win", "title":"music" }, { "url1":"http://ningli.win", "title":"music" } ]; mui.AddMenu(item,"#bb"); //这是渲染菜单,后面的是给起个id名 //console.log(mui); } var aid=document.getElementById("aa"); touchEvent.longTap(aid,function(){ //aid是指的被点击的元素,obja mui.ShowI("#bb"); //这里表示显示上面定义的菜单 }) </script> <style type="text/css"> #aa{ height: 600px; width: 300px; background: red; margin-top: 200px; } </style> </html>

js文件:



(function($){
	$.extend({
		AddMenu:function(obj,pid){
			this.str="";
			pid=pid.substr(1);
			this.obj=obj;
			this.str='<div id="'+pid+'" class="mui-popover"><ul class="mui-table-view">'
			for(i in this.obj){
				this.str+='<li class="mui-table-view-cell"><a href="'+obj[i].url1+'">'+obj[i].title+'</a></li>'
			}
    		this.str+="  </ul></div>";
   		document.body.insertAdjacentHTML("beforeend",this.str);
			console.log(this.str);
		},
		ShowI:function(aid){
				mui(aid).popover('show');
				aid=aid.substr(1);
					var id= document.getElementById(aid);
					var vW=window.innerWidth;
					var vH=window.innerHeight;
					var ow=id.offsetWidth;
					var oh=id.offsetHeight;
					var st=document.body.scrollTop;
					var pax=eva.touches[0].pageX;
					var pay=eva.touches[0].pageY;
					if(pax>=vW-ow){
						pax=pax-ow;
						if(pax<=0){
							pax=0;
						}
					}
					if((pay+oh)>=(st+vH)){
						pay=pay-oh;
					}
					
			id.style.left=pax+"px";
		id.style.top=pay+"px";
		}
});

})(mui);

var touchEvent={ /单次触摸事件/ tap:function(element,fn){ var startTx, startTy; element.addEventListener('touchstart',function(e){ var touches = e.touches[0]; startTx = touches.clientX; startTy = touches.clientY; }, false ); element.addEventListener('touchend',function(e){ var touches = e.changedTouches[0], endTx = touches.clientX, endTy = touches.clientY; // 在部分设备上 touch 事件比较灵敏,导致按下和松开手指时的事件坐标会出现一点点变化 if( Math.abs(startTx - endTx) < 6 && Math.abs(startTy - endTy) < 6 ){ fn(); } }, false ); }, /两次触摸事件/ doubleTap:function(element,fn){ var isTouchEnd = false, lastTime = 0, lastTx = null, lastTy = null, firstTouchEnd = true, body = document.body, dTapTimer, startTx, startTy, startTime; element.addEventListener( 'touchstart', function(e){ if( dTapTimer ){ clearTimeout( dTapTimer ); dTapTimer = null; } var touches = e.touches[0]; startTx = touches.clientX; startTy = touches.clientY;
}, false ); element.addEventListener( 'touchend',function(e){ var touches = e.changedTouches[0], endTx = touches.clientX, endTy = touches.clientY, now = Date.now(), duration = now - lastTime; // 首先要确保能触发单次的 tap 事件 if( Math.abs(startTx - endTx) < 6 && Math.abs(startTx - endTx) < 6 ){ // 两次 tap 的间隔确保在 500 毫秒以内 if(duration < 301 ){ // 本次的 tap 位置和上一次的 tap 的位置允许一定范围内的误差 if( lastTx !== null && Math.abs(lastTx - endTx) < 45 && Math.abs(lastTy - endTy) < 45 ){ firstTouchEnd = true; lastTx = lastTy = null; fn(); } } else{ lastTx = endTx; lastTy = endTy; } } else{ firstTouchEnd = true; lastTx = lastTy = null; } lastTime = now; }, false ); // 在 iOS 的 safari 上手指敲击屏幕的速度过快, // 有一定的几率会导致第二次不会响应 touchstart 和 touchend 事件 // 同时手指长时间的touch不会触发click if(~navigator.userAgent.toLowerCase().indexOf('iphone os')){ body.addEventListener( 'touchstart', function(e){ startTime = Date.now(); }, true ); body.addEventListener( 'touchend', function(e){ var noLongTap = Date.now() - startTime < 501; if(firstTouchEnd ){ firstTouchEnd = false; if( noLongTap && e.target === element ){ dTapTimer = setTimeout(function(){ firstTouchEnd = true; lastTx = lastTy = null; fn(); },400); } } else{ firstTouchEnd = true; } }, true ); // iOS 上手指多次敲击屏幕时的速度过快不会触发 click 事件 element.addEventListener( 'click', function( e ){ if(dTapTimer ){ clearTimeout( dTapTimer ); dTapTimer = null; firstTouchEnd = true; } }, false ); } }, /长按事件/ longTap:function(element,fn){ var startTx, startTy, lTapTimer; element.addEventListener( 'touchstart', function(e){ if( lTapTimer ){ clearTimeout( lTapTimer ); lTapTimer = null; } var touches = e.touches[0]; startTx = touches.clientX; startTy = touches.clientY; lTapTimer = setTimeout(function(){ fn(); },300); e.preventDefault(); eva=e; }, false ); element.addEventListener( 'touchmove', function( e ){ var touches = e.touches[0], endTx = touches.clientX, endTy = touches.clientY; if( lTapTimer && (Math.abs(endTx - startTx) > 5 || Math.abs(endTy - startTy) > 5) ){ clearTimeout( lTapTimer ); lTapTimer = null; } }, false ); element.addEventListener( 'touchend', function( e ){ if( lTapTimer ){ clearTimeout( lTapTimer ); lTapTimer = null; } }, false ); }, /滑屏事件/ swipe:function(element,fn){ var isTouchMove, startTx, startTy; element.addEventListener( 'touchstart', function( e ){ var touches = e.touches[0]; startTx = touches.clientX; startTy = touches.clientY; isTouchMove = false; }, false ); element.addEventListener( 'touchmove', function( e ){ isTouchMove = true; e.preventDefault(); }, false ); element.addEventListener( 'touchend', function( e ){ if( !isTouchMove ){ return; } var touches = e.changedTouches[0], endTx = touches.clientX, endTy = touches.clientY, distanceX = startTx - endTx distanceY = startTy - endTy, isSwipe = false; if( Math.abs(distanceX)>20||Math.abs(distanceY)>20 ){ fn(); } }, false ); }, /向上滑动事件/ swipeUp:function(element,fn){ var isTouchMove, startTx, startTy; element.addEventListener( 'touchstart', function( e ){ var touches = e.touches[0]; startTx = touches.clientX; startTy = touches.clientY; isTouchMove = false; }, false ); element.addEventListener( 'touchmove', function( e ){ isTouchMove = true; e.preventDefault(); }, false ); element.addEventListener( 'touchend', function( e ){ if( !isTouchMove ){ return; } var touches = e.changedTouches[0], endTx = touches.clientX, endTy = touches.clientY, distanceX = startTx - endTx distanceY = startTy - endTy, isSwipe = false; if( Math.abs(distanceX) < Math.abs(distanceY) ){ if( distanceY > 20 ){ fn();
isSwipe = true; } } }, false ); }, /向下滑动事件/ swipeDown:function(element,fn){ var isTouchMove, startTx, startTy; element.addEventListener( 'touchstart', function( e ){ var touches = e.touches[0]; startTx = touches.clientX; startTy = touches.clientY; isTouchMove = false; }, false ); element.addEventListener( 'touchmove', function( e ){ isTouchMove = true; e.preventDefault(); }, false ); element.addEventListener( 'touchend', function( e ){ if( !isTouchMove ){ return; } var touches = e.changedTouches[0], endTx = touches.clientX, endTy = touches.clientY, distanceX = startTx - endTx distanceY = startTy - endTy, isSwipe = false; if( Math.abs(distanceX) < Math.abs(distanceY) ){ if( distanceY < -20 ){ fn();
isSwipe = true; } } }, false ); }, /向左滑动事件/ swipeLeft:function(element,fn){ var isTouchMove, startTx, startTy; element.addEventListener( 'touchstart', function( e ){ var touches = e.touches[0]; startTx = touches.clientX; startTy = touches.clientY; isTouchMove = false; }, false ); element.addEventListener( 'touchmove', function( e ){ isTouchMove = true; e.preventDefault(); }, false ); element.addEventListener( 'touchend', function( e ){ if( !isTouchMove ){ return; } var touches = e.changedTouches[0], endTx = touches.clientX, endTy = touches.clientY, distanceX = startTx - endTx distanceY = startTy - endTy, isSwipe = false; if( Math.abs(distanceX) >= Math.abs(distanceY) ){ if( distanceX > 20 ){ fn();
isSwipe = true; } } }, false ); }, /向右滑动事件/ swipeRight:function(element,fn){ var isTouchMove, startTx, startTy; element.addEventListener( 'touchstart', function( e ){ var touches = e.touches[0]; startTx = touches.clientX; startTy = touches.clientY; isTouchMove = false; }, false ); element.addEventListener( 'touchmove', function( e ){ isTouchMove = true; e.preventDefault(); }, false ); element.addEventListener( 'touchend', function( e ){ if( !isTouchMove ){ return; } var touches = e.changedTouches[0], endTx = touches.clientX, endTy = touches.clientY, distanceX = startTx - endTx distanceY = startTy - endTy, isSwipe = false; if( Math.abs(distanceX) >= Math.abs(distanceY) ){ if( distanceX < -20 ){ fn();
isSwipe = true; } } }, false ); } }