javascript 使用拖动来移动元素

标签 javascript mousemove

如何设置元素的位置?当用户拖动一个元素(图像)时,我想让它同步移动。我看到正在调用我的“mousemove”处理程序。但是我无法让元素实际移动。

这是 mousemove 处理程序(被拖动的元素是“覆盖”):

function handleMouseMove (event)
{
  var deltaX = event.movementX;
  var deltaY = event.movementY;

  var divOverlay = document.getElementById ("overlay");
  var rect = divOverlay.getBoundingClientRect();

  divOverlay.style.left = rect.x + deltaX;
  divOverlay.style.top = rect.y + deltaY;
}

这是“覆盖”的 html:

<div id="overlay">
  ... some other stuff ...
  <img id="large" src="something.jpg" >
</div>

还有CSS:

#overlay {position:absolute; left:0; top:0}

看起来默认的拖拽 Action 体现出来了,就是随着鼠标移动的“叠加”的影子。但是元素本身并没有移动。

最佳答案

不确定您的实际实现情况。但是这段代码有效:

要使用您的代码来完成,这里是代码。您的代码的一个明显问题是您需要将“px”添加到您的 style.left 和 style.right。此外,您实际上如何处理代码中的事件也是未知的。使用这段代码,元素在一个圆圈内移动,您需要修复它,但您明白了。

var divOverlay = document.getElementById ("overlay");
var isDown = false;
divOverlay.addEventListener('mousedown', function(e) {
    isDown = true;
}, true);

document.addEventListener('mouseup', function() {
  isDown = false;
}, true);

document.addEventListener('mousemove', function(event) {
   event.preventDefault();
   if (isDown) {
   var deltaX = event.movementX;
   var deltaY = event.movementY;
  var rect = divOverlay.getBoundingClientRect();
  divOverlay.style.left = rect.x + deltaX + 'px';
  divOverlay.style.top  = rect.x + deltaX + 'px';
 }
}, true);

下面是另一种方法。 Codepen example

var offset = [0,0];
var divOverlay = document.getElementById ("overlay");
var isDown = false;

divOverlay.addEventListener('mousedown', function(e) {
isDown = true;
offset = [
    divOverlay.offsetLeft - e.clientX,
    divOverlay.offsetTop - e.clientY
 ];
}, true);

document.addEventListener('mouseup', function() {
   isDown = false;
}, true);

document.addEventListener('mousemove', function(e) {
    event.preventDefault();
    if (isDown) {
        divOverlay.style.left = (e.clientX + offset[0]) + 'px';
        divOverlay.style.top  = (e.clientY + offset[1]) + 'px';
   }
}, true);

关于javascript 使用拖动来移动元素,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45831399/

相关文章:

javascript - 在 JS 控制台中禁用 Chrome v 84 问题选项卡

javascript - 如何从 href 链接替换哈希 anchor (octothorpe)

java - 需要帮助让图像在自上而下的射击游戏中旋转以面向鼠标(Java)

jQuery Mousemove 和性能问题

jquery - 平滑修改 css 剪辑路径

c# - 如何跟踪鼠标 X/Y 位置并将其打印到标签上?

javascript - $broadcast 和 $on 不适用于基于 ng-if 的模板

javascript - 关闭在 WPF WebBrowser 中运行的网页

javascript - 如何使用 javascript 在 JSON 中找到第二个键名

javascript - 鼠标移动时对scrollLeft和scrollTop进行动画处理