可视区域内鼠标拖拽框
2017-03-11 17:07
155 查看
要想在通过鼠标来拖拽div,就要在鼠标点下的时刻获取光标与div的距离。然后在光标移动时设置div的left值为光标的left减去那个距离,设置div的top值为光标的top减去那个距离。但是div的left与top是相对于body(即整个页面),而光标的left与top却是相对于可视区域而言的。在没有滚动条时,两者在参考系是一样的;但是在滚动条出现以后两者的参考系就不同了。所以,有两种解决办法,要么把两者的参考系都变成body,要么把两者的参考系都变成可视区域。在这里,我采取了body作为参考系的方法。
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>鼠标拖拽框</title>
<style>
body{
height:1000px;
width:1500px;
}
#box{
position: absolute;
top:0;
left:0;
background-color: red;
width:100px;
height:100px;
cursor: pointer;
}
</style>
</head>
<body>
<div id="box">
</div>
<script>
function getPos(){
var scrollTop = document.documentElement.scrollTop || document.body.scrollTop;
var scrollLeft = document.documentElement.scrollLeft || document.body.scrollLeft;
return{x: scrollLeft, y: scrollTop};
}//用以获取滚动条的距离
function getStyle(obj,name){
if(obj.currentStyle){
return obj.currentStyle[name];
}
else{
return getComputedStyle(obj,false)[name];
}
}
var oDiv = document.getElementById('box');
var disx = 0;
var disy = 0;
oDiv.onmousedown = function(ev){
var oEvent = ev || event;
var pos = getPos();
disx = pos.x+oEvent.clientX - parseInt(getStyle(oDiv,'left'));
disy = pos.y+oEvent.clientY - parseInt(getStyle(oDiv,'top'));
document.onmousemove = function(ev){
var oEvent = ev || event;
var pos = getPos(oEvent);
var l = pos.x+oEvent.clientX - disx;
var h = pos.y+oEvent.clientY - disy;
if(l<pos.x){
l = pos.x;
}
if (l>document.documentElement.clientWidth + pos.x - parseInt(getStyle(oDiv,'width'))) {
l = document.documentElement.clientWidth + pos.x - parseInt(getStyle(oDiv,'width'));
}
if(h<pos.y){
h = pos.y;
}
if (h>document.documentElement.clientHeight + pos.y-parseInt(getStyle(oDiv,'height'))) {
h = document.documentElement.clientHeight + pos.y-parseInt(getStyle(oDiv,'height'));
}
oDiv.style.left = l + 'px';
oDiv.style.top = h + 'px';
}
document.onmouseup = function(){
document.onmousemove = null;
document.onmouseup = null;
}
return false;
}
</script>
</body>
</html>
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>鼠标拖拽框</title>
<style>
body{
height:1000px;
width:1500px;
}
#box{
position: absolute;
top:0;
left:0;
background-color: red;
width:100px;
height:100px;
cursor: pointer;
}
</style>
</head>
<body>
<div id="box">
</div>
<script>
function getPos(){
var scrollTop = document.documentElement.scrollTop || document.body.scrollTop;
var scrollLeft = document.documentElement.scrollLeft || document.body.scrollLeft;
return{x: scrollLeft, y: scrollTop};
}//用以获取滚动条的距离
function getStyle(obj,name){
if(obj.currentStyle){
return obj.currentStyle[name];
}
else{
return getComputedStyle(obj,false)[name];
}
}
var oDiv = document.getElementById('box');
var disx = 0;
var disy = 0;
oDiv.onmousedown = function(ev){
var oEvent = ev || event;
var pos = getPos();
disx = pos.x+oEvent.clientX - parseInt(getStyle(oDiv,'left'));
disy = pos.y+oEvent.clientY - parseInt(getStyle(oDiv,'top'));
document.onmousemove = function(ev){
var oEvent = ev || event;
var pos = getPos(oEvent);
var l = pos.x+oEvent.clientX - disx;
var h = pos.y+oEvent.clientY - disy;
if(l<pos.x){
l = pos.x;
}
if (l>document.documentElement.clientWidth + pos.x - parseInt(getStyle(oDiv,'width'))) {
l = document.documentElement.clientWidth + pos.x - parseInt(getStyle(oDiv,'width'));
}
if(h<pos.y){
h = pos.y;
}
if (h>document.documentElement.clientHeight + pos.y-parseInt(getStyle(oDiv,'height'))) {
h = document.documentElement.clientHeight + pos.y-parseInt(getStyle(oDiv,'height'));
}
oDiv.style.left = l + 'px';
oDiv.style.top = h + 'px';
}
document.onmouseup = function(){
document.onmousemove = null;
document.onmouseup = null;
}
return false;
}
</script>
</body>
</html>
相关文章推荐
- 鼠标拖拽窗口效果(不允许拖出屏幕的可视区域)
- 拖拽鼠标提示:显示区域的大小(ahk)
- 可视区域内拖拽
- wpf图片查看器,支持鼠标滚动缩放拖拽
- 关于3D物体坐标转换为UI坐标,随着鼠标拖拽等操作
- 鼠标拉近旋转拖拽模型
- 判断鼠标是否在指定区域代码
- JS获取浏览器可视区域的尺寸
- Flash中限定自由区域的拖拽
- 17.浏览器窗口可视区域大小
- JS取得鼠标选择区域
- CSS禁用鼠标拖拽选中内容
- JavaScript实现鼠标拖拽围绕圆心转动
- 百度地图api:只显示可视区域内的标注
- ubuntu屏幕截图工具:scrot,可截鼠标拖曳的矩形区域图形
- MFC 半透明界面鼠标选取区域时坐标返回值
- jquery实现鼠标拖拽滑动效果来选择数字的方法
- opencv鼠标点击记录坐标 连线 画封闭区域 二值填充
- [OpenGL]用鼠标拖拽图形移动
- 百度地图根据可视区域显示标注