元素拖拽效果插件
//draggable({target: ele, x:true, y:true});
function draggable(options){
var target = options.target;
var range = options.range || document.documentElement;
var absPos = offsetPagePosition(target);
target.style.position = "absolute";
target.style.left = absPos.x + "px";
target.style.top = absPos.y + "px";
var move = null;
target.addEventListener("mousedown", function(e){
var e = e || event;
var posDown = {x:e.offsetX, y:e.offsetY};
move = function(e){
var e = e || event;
var parentRange = offsetPagePosition(range);
if(options.x){
target.style.left = Math.max(parentRange.x, Math.min(e.clientX - posDown.x, parentRange.x+range.offsetWidth-target.offsetWidth) ) + "px";
}
if(options.y){
target.style.top = Math.max(parentRange.y, Math.min(e.clientY - posDown.y, parentRange.y+range.offsetHeight-target.offsetHeight) ) + "px";
}
}
document.addEventListener("mousemove", move);
});
document.addEventListener("mouseup", function(e){
document.removeEventListener("mousemove", move);
})
}
/** 计算元素在页面上的绝对位置 */
function offsetPagePosition(ele){
var _left = ele.offsetLeft;
var _top = ele.offsetTop;
while(ele.offsetParent){
_left += ele.offsetParent.offsetLeft;
_top += ele.offsetParent.offsetTop;
ele = ele.offsetParent;
}
return { "x":_left, "y":_top };
}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
