正在回答 回答被采纳积分+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 星