日期:2014-05-16 浏览次数:20463 次
<div id="move" style="position:fixed; bottom:0; left:0"><img src="http://c.csdn.net/bbs/t/5/i/pic_logo.gif"></div><!-- ←拖动层--> <div class="bbos" style="display:none">sdf</div>
<script>
/**
**@author lonephoenix
**/
var Drag=function(obj) {
var x,y,ox,oy;
var nx,ny;
var objmove=new Boolean(false);
obj.onmousedown=function(e) {
e=e||event;
if(e.button==0) {
obj.style.cursor="move";
ox=obj.offsetLeft;
oy=obj.offsetTop;
x=e.clientX;
y=e.clientY;
objmove=true;
};
};
obj.onmousemove=function(e) {
e=e||event;
if(objmove==true) {
nx=ox+e.clientX-x;
ny=oy+e.clientY-y;
obj.style.left=nx+"px";
obj.style.top=ny+"px";
}
};
obj.onmouseup=function(e) {
e=e||event;
if(e.button==0) {
objmove=false;
obj.style.cursor="default";
}
};
};
------解决方案--------------------
<!DOCTYPE html>
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>无标题文档</title>
<style>
* {
margin: 0;
padding: 0;
}
#drag {
width: 150px;
height: 150px;
position: relative;
background: red;
}
</style>
<script>
window.onload = init;
function init(){
var o_div = document.querySelector("#drag");
o_div.onmousedown = function(e){
var e_down = e || event;
var currentX = e_down.clientX;
var currentY = e_down.clientY;
var dragX = currentX - o_div.offsetLeft; //获取鼠标离div左边界的距离
var dragY = currentY - o_div.offsetTop; ////获取鼠标离div顶部的距离
var maxLeft = document.documentElement.clientWidth - o_div.offsetWidth; //获取最大left,为其不能超出整个根节点
var maxTop = document.documentElement.clientHeight - o_div.offsetHeight; //获取最大top,不能超过文档根节点底部
document.onmousemove = function(e){
var event = e || window.event;
var left = event.clientX - dragY;
var top = event.clientY - dragY;
if(left < 0){
left = 0;
}
if(left > maxLeft){
left = maxLeft;
}
if(top < 0){
top = 0;
}
if(top > maxTop){
top = maxTop;
}
o_div.style.left = left + "px";
o_div.style.top = top + "px";
}
document.onmouseup = function(){
document.onmousemove = null;
document.onmouseup = null;
}
}
return false;
}
</script>
</head>
<body>
<div id="drag"></div>
</body>
</html>
------解决方案--------------------
对象本身的mousedown和docuemnt的mouseup,点击之后到松开之前就应该是被拖动的过程
所以在:
全局变量一个:记录当前对象是否应该被拖动,默认是false:isDrag=!1;
1:对象本身的mousedown事件中绑定一个初始化的事件,设置:isDrag=!0;
2:根据isDrag的值来处理拖动事件
3:在document的mouseup时,这时候对象已经不应该被拖动了,所以,重置isDrag=!1
<script type="text/javascript">
var Drag=function(a) {
this.target = a;
this.pos = [];
this.isDrag = !1;
if(this.target) {
this.addEvent(this.target,'mousedown',this.bind(this,this.start));
this.addEvent(document,'mousemove',this.bind(this,this.move));