自己封装的一个原生JS拖动方法(推荐)
代码:
functiondrag(t,p){ varpoint=p||null, target=t||null, resultX=0, resultY=0; (!point)?point=target:'';//如果没有拖动点,则拖动点默认为整个别拖动元素 functiongetPos(t){ varoffsetLeft=0, offsetTop=0, offsetParent=t; while(offsetParent){ offsetLeft+=offsetParent.offsetLeft; offsetTop+=offsetParent.offsetTop; offsetParent=offsetParent.offsetParent; } return{'top':offsetTop,'left':offsetLeft}; } functioncore(){ varwidth=document.body.clientWidth||document.documentElement.clientWidth, height=document.body.clientHeight||document.documentElement.clientHeight; maxWidth=width-target.offsetWidth, maxHeight=height-target.offsetHeight; (resultX>=maxWidth)?target.style.left=maxWidth+'px':(resultX>0)?target.style.left=resultX+'px':'';//重置默认位置。 (resultY>=maxHeight)?target.style.top=maxHeight+'px':(resultY>0)?target.style.top=resultY+'px':'';//重置默认位置。 point.onmousedown=function(e){ vare=e||window.event, coordX=e.clientX, coordY=e.clientY, posX=getPos(target).left, posY=getPos(target).top; point.setCapture&&point.setCapture();//将Mouse事件锁定到指定元素上。 document.onmousemove=function(e){ varev=e||window.event, moveX=ev.clientX, moveY=ev.clientY; resultX=moveX-(coordX-posX);//结果值是坐标点减去被拖动元素距离浏览器左侧的边距 resultY=moveY-(coordY-posY); (resultX>0)?((resultX<maxWidth)?target.style.left=resultX+'px':target.style.left=maxWidth+'px'):target.style.left='0px'; (resultY>0)?((resultY<maxHeight)?target.style.top=resultY+'px':target.style.top=maxHeight+'px'):target.style.top='0px'; ev.stopPropagation&&ev.stopPropagation(); ev.preventDefault; ev.returnValue=false; ev.cancelBubble=true; }; }; document.onmouseup=function(){//解决拖动时,当鼠标指向的DOM对象非拖动点元素时,无法触发拖动点的onmousedown的BUG。 document.onmousemove=null; point.releaseCapture&&point.releaseCapture();//将Mouse事件从指定元素上移除。 }; point.onmouseup=function(e){ vare=e||window.event; document.onmousemove=null; point.releaseCapture&&point.releaseCapture(); }; } core(); window.onresize=core; }
使用方式:
drag(t,p) /* *说明 *t表示被拖动的元素 *p表示拖动点 */ //注意:如果省略拖动点,默认可拖动的区域是整个被拖动元素
以上就是小编为大家带来的自己封装的一个原生JS拖动方法(推荐)全部内容了,希望大家多多支持毛票票~