js-鼠标拖拽窗口bug修复
来源:互联网 发布:软件工程项目开发计划 编辑:程序博客网 时间:2024/05/23 18:32
- 拖拽原理:我们在拖拽窗口的时候,鼠标有这样一个过程:
鼠标按下onmousedown-鼠标移动到目的地onmousemove-松开鼠标onmouseup。
鼠标点击在窗口上的那个点在整个拖拽过程中始终不变,即该点到窗口左边的值,还有该点到窗口上边的值。到这里你可能会有疑问:我拖拽鼠标的时候,鼠标有可能点在靠左边的地方,或是靠右边的地方,那这个鼠标按下去的点不就是一个不确定的数值了?
是这样的,所以我们将这这个点的两个坐标值分别存放在两个变量里面:divX 、divY;
然后,我们先做一个简单的布局;给一个div,设置宽高,看做是窗口;
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title></title>
<style type="text/css">
#box{
width: 200px;
height: 150px;
border: 5px solid #333;
background: #d8d8d8;
position: absolute;
}
</style>
<script type="text/javascript" >
window.onload=function(){
var oBox=document.getElementById('box');
var divX=0;
var divY=0;
oBox.onmousedown=function(ev){
var iEvent=ev||event;
divX=iEvent.clientX-oBox.offsetLeft;//这个变量不需要单位px!
divY=iEvent.clientY-oBox.offsetTop;//这个变量不需要单位px!
//document是指onmousemove这个动作是在整个document区域内运动的,相应松开鼠标的时候,也是在document任意地方都可以松开鼠标
document.onmousemove=function(ev){
var iEvent=ev||event;
oBox.style.left=iEvent.clientX-divX+'px';
oBox.style.top=iEvent.clientY-divY+'px';
}
document.onmouseup=function(){
document.onmousedown=null;
document.onmousemove=null;
}
return false;//在低版本的火狐浏览器下,第二次拖拽的时候,窗口会有出现鬼影的现象,以此来修复这个bug;
}
}
</script>
</head>
<body>
<div id="box">
</div>
</body>
</html>
拖拽窗口的代码初步完成,写到这里大概你就明白是什么原理了,然后我们在测试一下这段代码,你会发现,当你快速的拖拽,将窗口给拖出了可视区域外,那么盒子跑了,拽不回来了;为修复这个bug,我们给代码加上几个限制条件,阻止窗口离开可视区域,代码如下:
<script type="text/javascript" >
window.onload=function(){var oBox=document.getElementById('box');
var divX=0;
var divY=0;
oBox.onmousedown=function(ev){
var iEvent=ev||event;
divX=iEvent.clientX-oBox.offsetLeft;//这个变量不需要单位px!
divY=iEvent.clientY-oBox.offsetTop;//这个变量不需要单位px!
//document是指onmousemove这个动作是在整个document区域内运动的,相应松开鼠标的时候,也是在document任意地方都可以松开鼠标
document.onmousemove=function(ev){
var iEvent=ev||event;
var left=iEvent.clientX-divX;//这个是鼠标移动到目的地后窗口的position位置放在left这个变量里面
var top=iEvent.clientY-divY;//这个是鼠标移动到目的地后窗口的position位置放在top这个变量里面
if(left<0){
left=0;
}
else if(left>document.documentElement.clientWidth-oBox.offsetWidth){
left=document.documentElement.clientWidth-oBox.offsetWidth;
}
if(top<0){
top=0;
}
else if(top>document.documentElement.clientHeight-oBox.offsetHeight){
top=document.documentElement.clientHeighth-oBox.offsetHeight;
}
oBox.style.left=left+'px';
oBox.style.top=top+'px';
}
document.onmouseup=function(){
document.onmousedown=null;
document.onmousemove=null;
}
return false;//在低版本的火狐浏览器下,第二次拖拽的时候,窗口会有出现鬼影的现象,以此来修复这个bug;
}
}
</script><script type="text/javascript" >
这样,窗口就不会被拖出可视区域后拽不回来了
- js-鼠标拖拽窗口bug修复
- js拖拽事件及bug修复
- JS:简单的拖拽事件和bug修复
- ajaxfileupload.js bug修复
- js实现鼠标拖拽移动小窗口
- 简易拖拽以及bug的修复
- JavaScript之修复拖拽的bug
- 拖拽及相关BUG的修复
- ajaxFileUpload.js 修复"unexpected token '<'" bug
- chrome拖拽鼠标样式bug
- 如何实现鼠标拖拽窗口
- js窗口拖拽
- BUG修复
- Bug 修复
- Bug修复
- bug修复
- JS鼠标拖拽效果
- js 鼠标拖拽元素
- 算法总结——约瑟夫问题
- 异或运算的作用
- RecycleView的最基本用法
- 通达OA 一次系统异常问题处理
- 从0开始学习 GitHub 系列之「07.GitHub 常见的几种操作」
- js-鼠标拖拽窗口bug修复
- 脏读,不可重复读,幻读及四种隔离级别
- java log4j 日志 配置 说明
- 首博——走上通往大神的路!
- D3D11教程十三之SpecularMap(高光贴图)
- 如何修改datetimepicker的日历的显示的宽度
- 安卓 相对布局属性大全
- Android.mk系统介绍
- 串口转WiFiGPRS 双网模块