正在回答 回答被采纳积分+1
4回答
妮可妮可妮_
2018-10-06 10:18:07
冒泡机制,即子集的事件会一级一级往父级上边传递,如果移动太快,可能会出现脱离div的情况,那么就需要把事件绑定在能够涵盖所有子集的父级身上,使得事件冒泡到父级,document是个很好的选择,无论鼠标在怎么移动,始终是在文档范围之内,参考代码:
<!DOCTYPE html> <html lang="en"> <head> <style type="text/css"> .box { position: absolute; width: 100px; height: 100px; border: 1px solid red; background: #FBF2BD; padding: 5px; text-align: center; top: 20px; left: 20px } </style> <script type="text/javascript" src="https://code.jquery.com/jquery-3.3.1.min.js"></script> <script type="text/javascript"> $(function () { var mFlag = false; var divX, divY; $(".box").bind("click mousedown", function (e) { if (event.type == 'click') { } else if (event.type == 'mousedown') { mFlag = true; divX = e.pageX - parseInt($(".box").css("left")); divY = e.pageY - parseInt($(".box").css("top")); } }); $(document).mousemove(function (e) { if (mFlag) { $(".box").css({ top: e.pageY - divY, left: e.pageX - divX }); $('#mx').text(e.pageX); $('#my').text(e.pageY); $('#cx').text(divX); $('#cy').text(divY); $('#dx').text(e.pageX - divX); $('#dy').text(e.pageY - divY); } }).mouseup(function () { mFlag = false; $(".box").fadeTo("fast", 1); }); }) </script> </head> <body> <div class="box" id="box">移动</div> </body> </html>
祝学习愉快!
慕数据7542861
2018-10-05 16:26:29
你要的疯狂拖动(手动滑稽)
<!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title>传统拖拽</title> <style> .dialog{ position: absolute; top: 50px; left: 100px; width: 200px; } .dialog .title{ background-color: #D7dEF0; width: 100%; height: 50px; line-height: 50px; text-align: center; cursor: move; } .dialog .content{ background-color: #f0f0f0; height: 200px; } </style> </head> <body> <div class="dialog" id="dialog"> <div class="title">title</div> <div class="content"></div> </div> <script type="text/javascript" src="//cdnjs.cloudflare.com/ajax/libs/jquery/1.12.4/jquery.js"></script> <script> var dialog = $('#dialog'); var titleEle = $('#dialog .title'); var lastPoint = {}; var isMouseDown = false; //使用事件委托 $(document).on('mousedown','div.title',function(e){ isMouseDown = true; lastPoint.x = e.pageX; lastPoint.y = e.pageY; }).on('mousemove',function(e){ if(isMouseDown){ var currentLocationX = dialog.offset().left + (e.pageX - lastPoint.x); var currentLocationY = dialog.offset().top + (e.pageY - lastPoint.y); dialog.offset({top: currentLocationY,left: currentLocationX}); lastPoint.x = e.pageX; lastPoint.y = e.pageY; } }).on('mouseup','div.title',function(){ isMouseDown = false; lastPoint = {}; }); </script> </body> </html>
幕布斯1124196
2018-01-16 17:45:27
你的情况是鼠标移动太快被拖动的元素跟不上,还是整个浏览器卡顿?
如果是后者的话,用函数节流,函数节流这东西作用是减少函数调用次数,防浏览器崩溃来着。
如果是前者的话,我在想你可以递归调用mousemove事件函数,然后套个函数节流,但是我没试过,我估计这个弄浏览器会累死,呵呵。
我有个简单粗暴的办法,是把mousemove事件函数和mouseup事件函数直接绑到document上头去,这样,就算鼠标出了被拖动的元素,元素一样会跟着跑
组件化思想开发电商网页 18版
- 参与学习 人
- 提交作业 467 份
- 解答问题 4826 个
本路径带你通过系统学习HTML5、JavaScript、jQuery的进阶知识,不仅如此,还会学习如何利用组件化的思想来开发网页,知识点+案例,使得所学可以更好的得到实践。
了解课程
恭喜解决一个难题,获得1积分~
来为老师/同学的回答评分吧
0 星