javascript - 如何在纯(普通)JavaScript 中修复我的可拖动代码,移动 div 的问题(div 跳跃或不移动)

标签 javascript html draggable dom-events onmousemove

我尝试编写纯可拖动元素,移动元素,我想单击div移动并将div放在容器上的某个位置。

https://codepen.io/kotbezbutow/pen/VJMbeK

我现在不知道如何解决我的问题。如果我计算光标和 div 边缘之间的差异,我的 div 不会移动。

        moveDraggable() {
            document.onmousemove = (e) => {

                let elementX = this.element.offsetLeft;
                let elementY = this.element.offsetTop;

                let mouseDownX = e.clientX;
                let mouseDownY = e.clientY;



                if (this.draggable == undefined) {
                    return;
                }

                let roznica = (mouseDownX - elementX);

                this.draggable.style.left = mouseDownX + roznica + "px";
                this.draggable.style.top = mouseDownY - 40 +  "px";
            }
        }

我所有的作品都在codepen https://codepen.io/kotbezbutow/pen/VJMbeK

最佳答案

鼠标按下时,您需要存储鼠标位置和 div 位置之间的增量。 然后,在鼠标移动时,您必须减去事件鼠标位置的先前增量

element.addEventListener('mousedown', event => {
    const rel = (() => {
        const x = event.clientX - parseInt(this.style.left)
        const y = event.clientY - parseInt(this.style.top)
        return { x: x, y: y }
    })()
    const moveHandler = event => {
        this.style.left = event.clientX - rel.x + 'px'
        this.style.top = event.clientY - rel.y + 'px'
    }
    const endHandler = () => {
        window.removeEventListener('mousemove', moveHandler, false)
        window.removeEventListener('mouseup', endHandler, false)
    }
    window.addEventListener('mousemove', moveHandler, false)
    window.addEventListener('mouseup', endHandler, false)
}

编辑:为了平滑移动,您应该使用 css 翻译而不是元素左/顶部

关于javascript - 如何在纯(普通)JavaScript 中修复我的可拖动代码,移动 div 的问题(div 跳跃或不移动),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56774564/

相关文章:

javascript - 右键单击文本框创建菜单和操作

javascript - 如何定位名称等于变量值的数组?

javascript - 为什么这个while循环会使浏览器崩溃?

javascript - 如何禁用 html 链接以调用 JS 函数?

jquery - 为什么 jQuery Draggable() 不适用于表单

javascript - Membase 有哪些 JavaScript 库

html - 无法更改 Bootstrap-select selectpicker 的标题

javascript - 垂直居中 SVG Viewbox

jQuery UI——绑定(bind)函数中的可拖动选项

objective-c - 拖放创建拖动图像