简易拖拽
1.拖拽 ==
鼠标按下 接着移动鼠标。
bar.onmousedown =function(){
document.onmousemove = function(){
}
}
2. 当我们按下鼠标的时候,就要记录当前 鼠标的位置 - 大盒子的位置
算出 bar 当前在 大盒子内的距离 。
3. 防止选择拖动(防止复制文字)
我们知道按下鼠标然后拖拽可以选择文字 的。
清除选中的内容
window.getSelection? window.getSelection().removeAllRanges() : document.selection.empty();
l拖拽原理
l距离不变
l三个事件:onmousedown鼠标按下、onmousemove鼠标抚摸、onmouseup鼠标弹起
l靠谱拖拽
l原有拖拽的问题
l直接给document加事件
lFF下,空Div拖拽Bug
l阻止默认事件
l防止拖出页面
l修正位置
<!DOCTYPE HTML><html><head><meta charset="utf-8"><title>无标题文档</title><style>#div1 {width:200px; height:200px; background:red; position:absolute;}</style><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;oDiv.style.left=oEvent.clientX-disX+'px';oDiv.style.top=oEvent.clientY-disY+'px';};document.onmouseup=function (){document.onmousemove=null;document.onmouseup=null;};};};</script></head><body><div id="div1"></div></body></html>
上面的这个拖拽有个bug,移动速度快和移动到浏览器头部的时候,大家观察一下,会出现问题。原因是盒子的作用域比较小,很容易移出本来盒子的区域导致代码不起作用,我们改进一下:
- <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;oDiv.style.left=oEvent.clientX-disX+'px';oDiv.style.top=oEvent.clientY-disY+'px';};document.onmouseup=function (){document.onmousemove=null;document.onmouseup=null;};};};</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;oDiv.style.left=oEvent.clientX-disX+'px';oDiv.style.top=oEvent.clientY-disY+'px';};document.onmouseup=function (){document.onmousemove=null;document.onmouseup=null;};return false;};};</script>
这个拖拽可以扔到不可视区域,放开鼠标就找不到了。再继续修复bug:
<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;}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';oDiv.style.top=t+'px';};document.onmouseup=function (){document.onmousemove=null;document.onmouseup=null;};return false;};};</script>
547

被折叠的 条评论
为什么被折叠?



