这个功能主要是用了js的onmousedown、onmousemove、onmouseup、onmouseout几个事件。
并需要理解,FF和IE的offsetX、offsetY的差别。在FF下需要用layerX、layerY来代替offsetX、offsetY,
这两个事件属性是获得鼠标相对于父元素的相对位置。
注意:声明的DOCTYPE会影响document.documentElement.scrollTop和document.documentElement.scrollLeft的取值,
本人在网上找的解决方案如下:
关于js中 document.body.scrollTop 不能返回正确值的原因
本来是为了通过 document.body.scrollTop来获取浏览器垂直滚动条向下滚动的像素,但是不管滚动条在什么位置总是返回是0,
造成这样的原因和 html的头部声明有关,如果头部声明 为:
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">,
这样肯定得到的结果是 0,如果该为<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
就能得到正确的结果,对于第一种头部声明想要得滚动条的滚动的高度怎么办,解决方法有两种
1、var scrollPos; if (typeof window.pageYOffset != 'undefined') {
scrollPos = window.pageYOffset; } else if (typeof document.compatMode != 'undefined' &&
document.compatMode != 'BackCompat') {
scrollPos = document.documentElement.scrollTop;
} else if (typeof document.body != 'undefined')
{
scrollPos = document.body.scrollTop;
}
2、用document.documentElement.scrollTop 替代 document.body.scrollTop
var obj = document.getElementById("movedivid");
var top = obj.style.top;
var left = obj.style.left;
obj.style.position = "absolute";
var xx = (movex + parseInt(left.substr(0, left.length - 2)));
var yy = (movey + parseInt(top.substr(0, top.length - 2)));
obj.style.left = xx + "px";
obj.style.top = yy + "px";
}
},
mouseup: function(){
this.mousedownflag = 0;
//alert(obj.style.width);
},
mouseout: function(){
this.mousedownflag = 0;
}
};
var scrollEvent = {
preScrollX: 0,
preScrollY: 0,
fixedFloatDiv: function(){
// alert('dadsa');
var obj = document.getElementById("movedivid");
var scrollX = document.documentElement.scrollLeft;
var scrollY = document.documentElement.scrollTop;
var top = obj.style.top;
var left = obj.style.left;
// alert(parseInt(top.substr(0, top.length-2)));
obj.style.top = (parseInt(top.substr(0, top.length - 2)) + scrollY - this.preScrollY) + "px";//当前div块距离浏览器top的距离+(浏览器滚动条移动的距离=当前浏览器滚动的距离-上次浏览器滚动的距离)
obj.style.left = (parseInt(left.substr(0, left.length - 2)) + scrollX - this.preScrollX) + "px";
this.preScrollY = scrollY;//保存这次浏览器滚动的y轴长度
this.preScrollX = scrollX;//保存这次浏览器滚动的x轴长度
}
};
/**
* 兼容IE和FireFox的onscroll滚动事件
*/
window.onscroll = function(){
scrollEvent.fixedFloatDiv();
};
// --></mce:script>
</head>
<body>
<div id="movedivid" style="z-index:9999;position: absolute; left: 245px; top:130px;width:300px;height:200px;background:#cccccc;cursor:move;" onmousedown="Onmousedrag.mousedown(event);" onmousemove="Onmousedrag.mousemove(event);" onmouseup="Onmousedrag.mouseup();"onmouseout="Onmousedrag.mouseout();">
test text
</div>
<div style="OVERFLOW:scroll;white-space:nowrap;text-overflow:ellipsis; width:200p;">
ads dadads dadads dadads dadads dadads dadads
<br/>
dadads
<br/>
dadads
<br/>
dadads
<br/>
<br/>
dadads
<br/>
dadads
<br/>
dadads
<br/>
dadads
<br/>
dadads
<br/>
dadads
<br/>
dadads
<br/>
dadads
<br/>
dadads
<br/>
dadads
<br/>
dadads
<br/>
dadads
<br/>
dadads
<br/>
dadads
<br/>
dadads
<br/>
dadads
<br/>
dadads
<br/>
dadads
<br/>
dadads
<br/>
dadads
<br/>
dadads
<br/>
dadads
<br/>
dadads
<br/>
dadads
<br/>
dadads
<br/>
dadads
<br/>
dadads
<br/>
dadads
<br/>
dadads
<br/>
dadads
<br/>
dadads
<br/>
dadads
<br/>
dadads
<br/>
dadads
<br/>
dadads
<br/>
dadads
<br/>
dadads
<br/>
dadads
<br/>
dadads
<br/>
dadads
<br/>
dadads
<br/>
dadads
<br/>
dadads
<br/>
dadads
<br/>
dadads
<br/>
dadads
<br/>
dadads
<br/>
dadads
<br/>
dadads
<br/>
dadads
<br/>
dadads
<br/>
dadads
<br/>
dadads
<br/>
dadads
<br/>
dadads
<br/>
dadads
<br/>
dadads
<br/>
dadads
<br/>
dadads
<br/>
dadads
<br/>
dadads
<br/>
dadads
<br/>
dadads
<br/>
dadads
<br/>
dadads
<br/>
dadads
<br/>
dadads
<br/>
dadads
<br/>
dadads
<br/>
dadads
<br/>
dadads
<br/>
dadads
<br/>
dadads
<br/>
dadads
<br/>
dadads
<br/>
dadads
<br/>
dadads
<br/>
dadads
<br/>
dadads
<br/>
dadads
<br/>
dadads
<br/>
dadads
<br/>
dadads
<br/>
dadads
<br/>
dadads
<br/>
dadads
<br/>
dadads
<br/>
dadads
<br/>
dadads
<br/>
dadads
<br/>
dadads
<br/>
dadads
<br/>
dadads
<br/>
dadads
<br/>
dadads
<br/>
dadads
<br/>
dadads
<br/>
dadads
<br/>
dadads
<br/>
dadads
<br/>
dadads
<br/>
dadads
<br/>
dadads
<br/>
dadads
<br/>
dadads
<br/>
dadads
<br/>
</div>
</body>
</html>
其中chrome游览器支持的是这种方式获得滚动的距离的
window.pageYOffset
那么把
var scrollX = document.documentElement.scrollLeft;
ar scrollY = document.documentElement.scrollTop;
改成下面这种,就支持这三种游览器了,呵呵!