小弟今天在做一个拖拽功能,网上查查找找了以后把大概写了出来,但拖动的时候有一个问题,mousedown,然后在拖拽的时候虽然能拖拽,但是如果页面有其他内容的话会选取其它的内容,就好像是在桌面有几个图标,左键拖动选取所有那种效果,非常别扭,所想请教一下如何去掉这个bug?
<script>
var item;
function dragac(ev){
    ev  = ev || window.event;
    var crtxy = dragxy(ev);
            if(item!=null){
            item.style.top=crtxy.y+'px';
            item.style.left=crtxy.x+'px';
            }
}function dragxy(ev){
    if(ev.pageX || ev.pageY){
        return {x:ev.pageX, y:ev.pageY};
    }
    return {
        x:ev.clientX + document.body.scrollLeft - document.body.clientLeft,
        y:ev.clientY + document.body.scrollTop  - document.body.clientTop
    };
}
document.onmousemove = dragac;
</script>
<h2>asdfasd</h2><h2>asdfasd</h2><h2>asdfasd</h2><h2>asdfasd</h2>
<div id="aaa" onmousedown="item=this" style="position:absolute" onmouseup="item=null">sadfasd</div><h2>asdfasd</h2><h2>asdfasd</h2><h2>asdfasd</h2>

解决方案 »

  1.   

    <h2>asdfasd</h2><h2>asdfasd</h2><h2>asdfasd</h2><h2>asdfasd</h2>
    <div id="aaa"  style="position:absolute" >sadfasd</div><h2>asdfasd</h2><h2>asdfasd</h2><h2>asdfasd</h2> <script>
    /**
     * 拖拽 效果
     */
    Endrag={
        x0:0,y0:0,x1:0,y1:0,moveable:false,index:100,NS:(navigator.appName=='Netscape'),offSets:{x:0,y:0},
        //开始拖动;  
        startDrag:function (e){
            e = e ? e : (window.event ? window.event : null);
            Endrag.getFocus(this); 
            if(e.button==(Endrag.NS)?0 :1)  {
                if(!Endrag.NS){this.setCapture()}
                Endrag.x0 = e.clientX ;  
                Endrag.y0 = e.clientY ;  
                Endrag.x1 = parseInt(Endrag.abs(this).x);  
                Endrag.y1 = parseInt(Endrag.abs(this).y);    
                Endrag.moveable = true;
            }
        }, 
        //拖动;  
        drag:function (e){
            e = e ? e : (window.event ? window.event : null);  
            if(Endrag.moveable){
             var tempX=(Endrag.x1 + e.clientX - Endrag.x0 - Endrag.offSets.x);
             var tempY=(Endrag.y1 + e.clientY - Endrag.y0 - Endrag.offSets.y);
             if(tempX>0)
             this.style.left = tempX + "px";
             else
             this.style.left="0px";
             if(tempY>0)
             this.style.top  = tempY + "px";         
             else
             this.style.top="0px";
            }  
        },  
        //停止拖动;  
        stopDrag:function (e){  
            if(Endrag.moveable)  {    
                if(!Endrag.NS){this.releaseCapture();}
                Endrag.moveable = false;  
            }  
        },
        //获得焦点;  
        getFocus:function (obj){  
            if(obj.style.zIndex!=this.index){  
                this.index += 2;  
                var idx = this.index;  
                obj.style.zIndex=idx;  
            }  
        },
        abs:function (element) {
            var result = { x: element.offsetLeft, y: element.offsetTop};
            element = element.offsetParent;
            while (element) {
                result.x += element.offsetLeft;
                result.y += element.offsetTop;
                element = element.offsetParent;
            }
            return result;
        }, 
        offSet:function(setting){
            this.offSets=setting;
        },
        bind:function(obj){
    alert(obj);
            obj=typeof(obj)=="object" ? obj:document.getElementById(obj);
            obj.onmousedown=Endrag.startDrag;
            obj.onmouseup=Endrag.stopDrag;
            obj.onmousemove=Endrag.drag;
            return this;
        }
    } Endrag.bind(document.getElementById("aaa"));
    </script>  你那块onmousedown的时候位置算错了 
      

  2.   

    CSS设置: -moz-user-select:none;
              -webkit-user-select:none;
    IE下添加事件:xxx.onselect = function(){return false;}