[英]Draggable effect doesn't work in Javascript
I have the follow code to make the div
to become draggable:我有以下代码使
div
变得可拖动:
let div = document.querySelector('div') div.onmousedown = function() { div.addEventListener('mousemove', move, true) } window.onmouseup = function() { window.removeEventListener('mousemove', move, true) } function move(e) { this.style.position = 'absolute' this.style.top = e.clientY + 'px' this.style.left = e.clientX + 'px' }
div { background: red; width: 100px; height: 100px; }
<div></div>
I am not sure why, this code doesn't work properly as I expected.我不知道为什么,这段代码不能像我预期的那样正常工作。
Sometimes, when I just hover the div
, it position will also change and that is what I don't expect.有时,当我只是 hover
div
时,它 position 也会改变,这是我没想到的。 I checked the code for several times, but I didn't define the mouseover
effect.我检查了几次代码,但我没有定义
mouseover
效果。
Could anyone tell me what I did wrong and how to fix it?谁能告诉我我做错了什么以及如何解决?
Thanks for any responds!感谢您的任何回复!
You have to remove the event listener from the div, not the window:您必须从 div 中删除事件侦听器,而不是 window:
I also centered the div when the user is dragging it, so the mouse has no chance to leave the div.当用户拖动它时,我也将 div 居中,因此鼠标没有机会离开 div。
let div = document.querySelector('div'); function move(e) { this.style.position = 'absolute' this.style.top = e.clientY - (this.offsetHeight / 2) + 'px' this.style.left = e.clientX - (this.offsetWidth / 2) + 'px' } div.addEventListener('mousedown', function() { this.addEventListener('mousemove', move, true); }); window.addEventListener('mouseup', function() { div.removeEventListener('mousemove', move, true); });
div { background: red; width: 100px; height: 100px; }
<div></div>
There were two issues,有两个问题,
let div = document.querySelector('div') let offsetX = ""; let offsetY = ""; div.onmousedown = function(e) { var domRect = this.getBoundingClientRect(); offsetX = e.clientX - domRect.left; offsetY = e.clientY - domRect.top; div.addEventListener('mousemove', move, true) } window.onmouseup = function() { div.removeEventListener('mousemove', move, true) } function move(e) { this.style.position = 'absolute' this.style.top = e.clientY - offsetY + 'px' this.style.left = e.clientX - offsetX + 'px' }
#my-div { background: red; width: 100px; height: 100px; }
<div id="my-div"></div>
dragElement(document.getElementById("mydiv")); function dragElement(elmnt) { var pos1 = 0, pos2 = 0, pos3 = 0, pos4 = 0; if (document.getElementById(elmnt.id + "header")) { document.getElementById(elmnt.id + "header").onmousedown = dragMouseDown; } else { elmnt.onmousedown = dragMouseDown; } function dragMouseDown(e) { e = e || window.event; e.preventDefault(); pos3 = e.clientX; pos4 = e.clientY; document.onmouseup = closeDragElement; document.onmousemove = elementDrag; } function elementDrag(e) { e = e || window.event; e.preventDefault(); pos1 = pos3 - e.clientX; pos2 = pos4 - e.clientY; pos3 = e.clientX; pos4 = e.clientY; elmnt.style.top = (elmnt.offsetTop - pos2) + "px"; elmnt.style.left = (elmnt.offsetLeft - pos1) + "px"; } function closeDragElement() { document.onmouseup = null; document.onmousemove = null; } }
#mydiv { position: absolute; z-index: 9; background-color: #f1f1f1; text-align: center; border: 1px solid #d3d3d3; } #mydivheader { height: 100px; width: 100px; cursor: move; z-index: 10; background-color: #2196F3; color: #fff; }
<h1>Draggable DIV Element</h1> <div id="mydiv"> <div id="mydivheader"></div> </div>
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.