拖拽

HTML

文字文字文字文字
<div id="box"></div>
<img src="img/2.jpg"/>

CSS

#box,img{
	 50px;
	height: 50px;
	background: red;
	position: absolute;
}

JS

/*
 拖拽的时候,如果有文字被选中,会产生问题
	原因:当鼠标按下的时候,如果页面中有文字被选中,那么会触发浏览器默认拖拽文字的效果
	解决:标准下: 阻止默认行为  非标准下:全局捕获
	拖拽图片会有相同问题,解决方法同上
	
全局捕获
obj.setCapture();
设置全局捕获,当我们给一个元素设置全局捕获以后,那么这个元素就会监听后续发生的所有事件,当有事件发生的时候,就会被当前设置了全局捕获的元素所触发
 ie:有,并且有效果
 ff:有,但是没有效果
 chrome:没有
 
 释放全局捕获
 obj.releaseCapture();
 * */
var Box=document.getElementById("box");
var oImg=document.getElementsByTagName("img")[0];

drag(oImg);
drag(Box);

function drag(obj){
	obj.onmousedown=function(ev){
		var ev=ev||event;
		
		
		var disX=ev.clientX-this.offsetLeft;
		var disY=ev.clientY-this.offsetTop;
		
		//设置全局捕获
		//所有的onmousemove或者onmouseup都被oImg截获,然后作用在oImg身上
		if(obj.setCapture){
			obj.setCapture();
		}
		
		document.onmousemove=function(ev){
			var ev=ev||event;
			
			var L=ev.clientX-disX;
			var T=ev.clientY-disY;
			
			//限制拖拽范围
			//横向
			if(L<0){
				L=0;
			}else if(L>document.documentElement.clientWidth-obj.offsetWidth){
				L=document.documentElement.clientWidth-obj.offsetWidth;
			}
			//纵向
			if(T<0){
				T=0;
			}else if(T>document.documentElement.clientHeight-obj.offsetHeight){
				T=document.documentElement.clientHeight-obj.offsetHeight;
			}
			
			obj.style.left=L+'px';
			obj.style.top=T+'px';
		}
		
		document.onmouseup=function(){
			document.onmousemove=null;
			//释放全局捕获
			if(obj.releaseCapture){
				obj.releaseCapture();
			}
		}
		
		//清除默认事件
		return false;
	}
}

  

  

  

  

原文地址:https://www.cnblogs.com/yangxue72/p/8136896.html