gpt4 book ai didi

javascript - 如何拖动 div 并使光标保持在单击它时的同一位置?

转载 作者:行者123 更新时间:2023-12-03 07:28:14 25 4
gpt4 key购买 nike

当我点击一个div时,我试图拖动它,但是当我这样做时,如果我删除offset并放置position,div会闪烁并向左移动> 相反,它可以工作,但光标会转到 div 的左上角。

var selected = 0,
x = 0,
y = 0;

$.fn.isDraggable = function() {

$(this).on('mousedown', function(e) {
selected = $(this);
$(selected).css({
position: 'absolute',
left: e.pageX - $(selected).position().left,
top: e.pageY - $(selected).position().top
});
});
$(document).on('mouseup', function() {
if (selected !== 0) {
selected = 0;
}
});
$(document).bind('mousemove', function(e) {
$(selected).css({
position: 'absolute',
left: e.pageX - $(selected).offset().left,
top: e.pageY - $(selected).offset().top
});
});

return true;
};


$('#card').isDraggable();
#card {
position: fixed;
width: 100px;
height: 150px;
top: calc(50% - 75px);
left: calc(50% - 50px);
border: 1px solid #D3D3D3;
}
<!DOCTYPE html>
<html>

<head>
<script type="text/javascript" src="http://code.jquery.com/jquery-latest.min.js"></script>
<title>freeMarketRocks</title>

</head>

<body>
<div>

<div id="card">
</div>

</div>
</body>

</html>

最佳答案

您这里有两个问题。首先,您的事件处理程序逻辑可能会导致性能浪费,因为您要求浏览器不断检查鼠标移动,即使没有必要。

其次,盒子坐标的计算是错误的,必须考虑到初始位置。这就是 fiddle 中的 deltaXdeltaY 变量的用途

这是一个工作 fiddle https://jsfiddle.net/TCHdevlp/t2bapq5y/

或者在这里:

  var selected = 0,
x = 0,
y = 0,
boxX = 0,
boxY = 0;

$.fn.isDraggable = function() {

$(this).on('mousedown', function(e) {
selected = $(this);
//get initial positions
x = e.pageX;
y = e.pageY;
BoxX = $(selected).offset().left;
BoxY = $(selected).offset().top;
//bind mousemove
$(document).bind('mousemove', function(e) {
//compute new coordinate
deltaX = e.pageX - x;
deltaY = e.pageY - y;
$(selected).css({
position: 'absolute',
left: (BoxX + deltaX),
top: (BoxY + deltaY)
});
});
});
//unbind when finished
$(document).on('mouseup', function() {
if (selected !== 0) {
$(document).unbind("mousemove");
selected = 0;
}
});

return true;
};


$('#card').isDraggable();
#card {
position: fixed;
width: 100px;
height: 150px;
top: 10x;
left: 10px;
border: 1px solid #D3D3D3;
}
<div>

<div id="card">
</div>

</div>

关于javascript - 如何拖动 div 并使光标保持在单击它时的同一位置?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35917863/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com