JS错误记录 - 事件 - 拖拽
错误总结:
1. var disX = 0; 现在window.onload里声明变量,而不是在事件oDiv.onmousedown里面声明并赋值。
对于这个还不是很明白。
2. onmousedown事件的主体是oDiv,不是整个窗口。
3. if ... else if ... 两个花括号的中间不可以写分号 ; 。
4. oDiv.style.left = l + 'px'; left 值有px。
5. 写法错误。 可视窗的宽度: document.documentElement.clientWidth
if(l<)
{
l = 0;
}
// if(l>oEvent.clientWidth - oDiv.offsetWidth)
else if(l>document.documentElement.clientWidth-oDiv.offsetWidth)
{
// l = oEvent.clientWidth - oDiv.offsetWidth l=document.documentElement.clientWidth-oDiv.offsetWidth;
};
<script>
window.onload = function()
{
var oDiv = document.getElementById('div1');
var disX = 0; // 为什么在这里声明, 且声明变量为 0 ?
var disY = 0;
oDiv.onmousedown = function(ev)
// 不是点击整个窗口时拖拽, 是点击div的时候拖拽
{
var oEvent = ev || event;
disX = oEvent.clientX - oDiv.offsetLeft;
disY = oEvent.clientY - oDiv.offsetTop;
//window.onmousemove = function(ev) // window.onmouseove 和 document.onmousemove 区别?
document.onmousemove=function (ev)
{
var oEvent = ev || event;
var l = oEvent.clientX - disX // 变量表示div位置的值
var t = oEvent.clientY - disY
// 画图,分成 左边顶格, 右边顶格 两种情况考虑。
if(l<0)
{
l=0;
} //; // if 和 else if之间的语句不可以写分号 ;
else if(l>document.documentElement.clientWidth - oDiv.offsetWidth)
{
l = document.documentElement.clientWidth - oDiv.offsetWidth;
};
if(t<0)
{
t=0;
}
else if(t>document.documentElement.clientHeight-oDiv.offsetHeight)
{
t=document.documentElement.clientHeight-oDiv.offsetHeight;
}
oDiv.style.left = l + 'px'; // left 值有px
oDiv.style.top = t + 'px';
};
document.onmouseup=function ()
{
document.onmousemove=null;
document.onmouseup=null;
};
return false; // 阻止默认事件,解决火狐浏览器拖拽空div的bug
};
};
</script>
<script>
window.onload = function()
{
var oDiv = document.getElementById('div1');
var disX = 0;
var disY = 0; oDiv.onmousedown = function(ev)
{
var oEvent = ev||event; disX = oEvent.clientX - oDiv.offsetLeft;
disY = oEvent.clientY - oDiv.offsetTop; document.onmousemove = function(ev)
{
var oEvent = ev||event;
var l = oEvent.clientX - disX;
var t = oEvent.clientY - disY; if(l<0)
{
l = 0;
}
// if(l>oEvent.clientWidth - oDiv.offsetWidth)
else if(l>document.documentElement.clientWidth-oDiv.offsetWidth)
{
// l = oEvent.clientWidth - oDiv.offsetWidth l=document.documentElement.clientWidth-oDiv.offsetWidth;
}; if(t<0)
{
t = 0;
}
else if(t>document.documentElement.clientHeight-oDiv.offsetHeight)
{
t=document.documentElement.clientHeight-oDiv.offsetHeight;
} // if(t>oEvent.clientHeight - oDiv.offsetHeight)
// {
// l = oEvent.clientHeight - oDiv.offsetHeight
// }; oDiv.style.left = l + 'px';
oDiv.style.top = t + 'px';
}; document.onmouseup = function()
{
document.onmousemove = null;
document.onmouseup = null;
}; return false;
};
};
</script>
JS错误记录 - 事件 - 拖拽的更多相关文章
- js div浮动层拖拽效果代码
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/ ...
- js 实现table表格拖拽和点击表头升降序排序
js 实现table表格拖拽和点击表头升降序排序,写的比较乱,用的时候可以把其中的一些模块函数提取出来 样式,由于是可拖拽表格,所以样式 table tr th{cursor:move;} js实现 ...
- 纯JS Web在线可拖拽的流程设计器
F2工作流引擎之-纯JS Web在线可拖拽的流程设计器 Web纯JS流程设计器无需编程,完全是通过鼠标拖.拉.拽的方式来完成,支持串行.并行.分支.异或分支.M取N路分支.会签.聚合.多重聚合.退回. ...
- 通过 JS 实现简单的拖拽功能并且可以在特定元素上禁止拖拽
前言 关于讲解 JS 的拖拽功能的文章数不胜数,我确实没有必要大费周章再写一篇重复的文章来吸引眼球.本文的重点是讲解如何在某些特定的元素上禁止拖拽.这是我在编写插件时遇到的问题,其实很多插件的拖拽功能 ...
- jQuery UI =>jquery-ui.js中sortable方法拖拽对象位置偏移问题
今天要处理sortable方法处理的对象,拖拽的时候,位置偏移的问题. 按理应该是鼠标在哪,对象就跟着在哪的 百度了一下问题,http://blog.csdn.net/samed/article/de ...
- JS利用 Sea.js 实现模块化:拖拽、缩放及范围限制
知识点总结: Sea.js的使用:define.export.seajs.use.require等方法: 参考:http://seajs.org/docs/ Sea.js与require.js的区 ...
- 原生js实现Canvas实现拖拽式绘图,支持画笔、线条、箭头、三角形和圆形等等图形绘制功能,有实例Demo
前言 需要用到图形绘制,没有找到完整的图形绘制实现,所以自己实现了一个 - - 演示地址:查看演示DEMO 新版本支持IE5+(你没看错,就是某软的IE浏览器)以上任意浏览器的Canvas绘图:htt ...
- 原生js实现模块来回拖拽效果
代码比较冗余,还没来得及做整理,往见谅. 主要用到的 JS 事件有: onmousedown:鼠标点下事件 onmousemove:鼠标移动事件 onmouseup:鼠标放开事件 具体代码如下: &l ...
- JS 弹出框拖拽
css代码 body { margin:; text-align: center; } .box { display: none; background-color: #fff !important; ...
随机推荐
- 【Uva 1252】Twenty Questions
[Link]: [Description] 给你n个物体,每个物体都有m种属性; (每个物体的属性都能和别的物体的属性区别) 现在,你已知这n个物体; 然后让一个人心里想一个物体 你可以问这个人,这个 ...
- codeforce 571 B Minimization
题意:给出一个序列,经过合适的排序后.使得最小. 做法:将a升序排序后,dp[i][j]:选择i个数量为n/k的集合,选择j个数量为n/k+1的集合的最小值. 举个样例, a={1,2,3,4,5,6 ...
- vim 计算器寄存器使用
我们可能会在vim的使用中,碰到下面的情况 当我正在写一周预算的时候,我想计算下每天我买菜花2.7,每天买两顿,周死晚上出去吃,周六额外买1.5斤14.8一斤的猪肉... 这时候你打算怎么办呢,是不是 ...
- 面向对象(OO)基础
面向对象,英文Object-Oriented,简称OO),另外相关的还有:面向对象分析(Object-Oriented Analysis,OOA) 面向对象设计(Object-Oriented Des ...
- 轻松八步搞定Cacti配置安装(原创视频)
轻松八步搞定Cacti配置安装 1.安装web server $sudo apt-get install apache2 验证 http://localhost 2.$sudo apt-get ins ...
- easyui 前端实现分页 复制就能用
<!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title> ...
- LuoguP2754 [CTSC1999]家园(分层图,最大流)
题目背景 none! 题目描述 由于人类对自然资源的消耗,人们意识到大约在 2300 年之后,地球就不能再居住了.于是在月球上建立了新的绿地,以便在需要时移民.令人意想不到的是,2177 年冬由于未知 ...
- python hmac 加密
python2 : key 是秘钥 类型为 str msg 要加密的文件 str digestmod 要加密的方式 python3: key 是秘钥 类型为 byte msg 要加密的文件 byte ...
- 【习题 8-13 UVA - 10570】Meeting with Aliens
[链接] 我是链接,点我呀:) [题意] 在这里输入题意 [题解] 枚举1的位置在i 往右摆成一排. a[i+1]..a[n]..a[1]..a[i-1]变为有序的 ->寻找循环节,每个循环节的 ...
- Mindjet MindManager 思维导图软件-使用思维导图跟踪调用流程,绘制软件框架
思维导图.据说是每一个产品经理必备的软件.假设你阅读大型源码.使用思维导图跟踪调用流程,绘制软件框架将会很方便. 特点:没什么好说的.用过的都说好. 软件截图: 下载:http://www.mindm ...