console
;(function(){
function eventHandler(elem, eventName, eventType){
elem.addEventListener ? elem.addEventListener(eventType, eventName, false) : elem.attachEvent('on'+eventType, eventName);
};
function removeEventHandler(elem, eventName, eventType){
elem.removeEventListener ? elem.removeEventListener(eventType, eventName) : elem.detachEvent(eventType, eventName);
}
function getStyleValue(elem, property){
return window.getComputedStyle(elem,null) ? window.getComputedStyle(elem,null)[property] : elem.currentStyle[property];
}
function Drag(selector){
this.elem = typeof selector === 'object' ? selector : document.getElementById(selector);
this.initObjX = 0;
this.initObjY = 0;
this.initMouseX = 0;
this.initMouseY = 0;
this.isDraging = false;
this._init();
}
Drag.prototype = {
constructor : Drag,
_init : function(){
this.setDrag();
},
getObjPos : function(elem) {
var pos = {x: 0, y: 0};
if(getStyleValue(elem, 'position') == 'static') {
this.elem.style.position = 'relative';
return pos;
} else {
var x = parseInt(getStyleValue(elem, 'left') ? getStyleValue(elem, 'left') : 0);
var y = parseInt(getStyleValue(elem, 'top') ? getStyleValue(elem, 'top') : 0);
return pos = {
x: x,
y: y
}
}
},
setObjPos : function (elem, pos){
elem.style.position = 'absolute';
elem.style.left = pos.x+'px';
elem.style.top = pos.y+'px';
},
setDrag : function(){
var self = this;
var time = null;
function mousedown(event){
event = window.event || event;
this.initMouseX = event.clientX;
this.initMouseY = event.clientY;
var pos = self.getObjPos(self.elem);
this.initObjX = pos.x;
this.initObjY = pos.y;
time = setTimeout(function(){
eventHandler(self.elem, mousemove, "mousemove");
}, 25);
eventHandler(self.elem, mouseup, "mouseup");
self.isDraging = true;
}
function mousemove(event){
event = window.event || event;
if(self.isDraging){
var moveX = event.clientX - this.initMouseX + this.initObjX;
var moveY = event.clientY - this.initMouseY + this.initObjY;
self.setObjPos(self.elem, {
x : moveX,
y : moveY,
});
}
}
function mouseup(event){
event = window.event || event;
self.isDraging = false;
clearTimeout(time);
removeEventHandler(document, mousemove, 'mousemove');
removeEventHandler(document, mouseup, 'mouseup');
}
eventHandler(this.elem, mousedown, "mousedown");
}
}
window.Drag = Drag;
})();
<div class="box" id="box" style="position: absolute;left: 25px;top: 25px;"></div>
<script type="text/javascript">
window.onload = function(){
new Drag(document.getElementById("box"));
}
</script>
body {
margin: 0;
padding: 0;
position: relative;
}
.box {
width: 100px;
height: 100px;
background: deeppink;
position: absolute;
left: 25px;
top: 25px;
cursor: move;
}