拖拽
HTML
文字文字文字文字 <div id="box"></div> <img src="img/2.jpg"/>
CSS
#box,img{
width: 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;
}
}

浙公网安备 33010602011771号