# js拖动效果1

<div id="pro_lay">


<div id="area" class="area">
  <!-- <div id="areaResize"></div> -->
</div>


</div>
 
function Drag(options){
    this.drag = null;
    this.disX = 0;
    this.disY = 0;
    this.options = { 
        dragAimClass:options.dragAimClass?options.dragAimClass:'',
        moveFun:options.moveFun?options.moveFun:function(){}
    }

    this.init();
}
Drag.prototype.addEvents = function(target,eventType,handle){
    if(target.addEventListener){ 
            target.addEventListener(eventType,handle,false);
        
    }else{
            target.attachEvent('on'+eventType,function(){
                handle.call(target,arguments);
            });
        
    };
}

Drag.prototype.removeEvents = function(target,eventType,handle){
        if(target.removeEventListener){
             target.removeEventListener(eventType, handle, false);
         } else if(target.detachEvent){
             target.detachEvent('on' + eventType, handle);
         } else {
             element['on' + eventType] = null;
         }
}

Drag.prototype.init = function(){
    this.mouseMove();
}
Drag.prototype.createDragDom = function(x,y,w,h){
     console.log(x,y,w,h);
    var d = document.createElement('div');
    d.id="dragDom";
    d.style.position = 'fixed';
    d.style.zIndex = 1;
    d.style.border = 'dashed red 1px';
    d.style.boxSizing = 'border-box';
    d.style.transform="translate3d(0,0,0)";
    d.style.left = x+'px';
    d.style.top = y+'px';
    d.style.width = w+'px';
    d.style.height = h+'px';


    document.body.appendChild(d);

    this.drag = d; 
    _this = this;
    this.addEvents(d,'mouseup',function(){
        _this.disX = 0;
        _this.disY = 0;
        _this.removeEvents(d,'mouseup',null);
        _this.drag = null; 
        document.getElementById('dragDom') && 
        document.body.removeChild(document.getElementById('dragDom'));

    })

}

Drag.prototype.mouseMove = function(){
    var _this = this;

    this.addEvents(document,'mouseleave',function(event){
        _this.disX = 0;
        _this.disY = 0; 
        _this.drag = null; 

         document.getElementById('dragDom') && 
        document.body.removeChild(document.getElementById('dragDom'));
    })


    this.addEvents(document,'mousedown',function(event){

         var e = event || window.event; 
        //点中了要拖动的元素
        if(e.target.className.toLowerCase().indexOf(_this.options.dragAimClass)>-1){
            _this.drag = e.target;
            

            var scrollX = document.documentElement.scrollLeft || document.body.scrollLeft;
            var scrollY = document.documentElement.scrollTop || document.body.scrollTop;
            var x = e.pageX || e.clientX + scrollX;
            var y = e.pageY || e.clientY + scrollY; 

            _this.disX = x - e.target.offsetLeft;
            _this.disY = y - e.target.offsetTop;

            _this.createDragDom(
            e.target.offsetLeft-scrollX,
            e.target.offsetTop-scrollY,
            e.target.offsetWidth,
            e.target.offsetHeight

            );

        }

    })

    this.addEvents(document,'mousemove',function(event){ 
                if(_this.drag !== null){
                var e = event || window.event;
            var scrollX = document.documentElement.scrollLeft || document.body.scrollLeft;
            var scrollY = document.documentElement.scrollTop || document.body.scrollTop;
            var x = e.pageX || e.clientX + scrollX;
            var y = e.pageY || e.clientY + scrollY;  

                _this.drag.style.left = (x - _this.disX-scrollX)+'px';
                _this.drag.style.top = (y - _this.disY-scrollY)+'px';

                _this.options.moveFun(x,y);
            
            }
                
        
        })
}


window.onload = function(){
    var x = null;
    var y = null;
    new Drag({ 
        dragAimClass:"area",
        moveFun:function(x,y){
            console.log(x,y);
        }
    })

    


}


body{

  padding:0;
  margin:0;
    -moz-user-select:none; /*火狐*/
    -webkit-user-select:none; /*webkit浏览器*/
    -ms-user-select:none; /*IE10*/
    -khtml-user-select:none; /*早期浏览器*/
    user-select:none;
padding-left:40px;
}
#a{
    height: 200px;
}
#area_lay{

    width: 1000px;
    height:1000px;
    background: #ddd;

}
#area{
  width:100px;
  height:50px;
  background:#000;
  position:relative; 
  top:10px
}
#areaResize{
  position:absolute;
  left:100px;
  top:100px;
  width:20px;
  height:20px;
  background:red;
}