js拖拽遇到的问题,待解决

女爷i 2022-07-28 04:13 290阅读 0赞

以下拖拽代码,遇到一个问题,点击拖拽狗狗后,鼠标松开,继续移动鼠标,狗狗仍是被拖拽状态,得再次点击鼠标,释放拖拽事件。
我百思不得其解,猜测是不是document.onmouseup没有准确的检测鼠标的释放,诶,不知道

  1. window.onload = function() {
  2. drag();
  3. }
  4. function drag() {
  5. var oDog = document.getElementById("dog");
  6. oDog.onmousedown = fnDown;
  7. }
  8. function fnDown(event) {
  9. event = EventUtil.getEvent();
  10. var oDog = document.getElementById('dog'),
  11. disX = event.clientX - oDog.offsetLeft,
  12. disY = event.clientY - oDog.offsetTop;
  13. document.onmousemove = function(event) {
  14. if (oDog.onmousedown) {
  15. fnMove(event, disX, disY);
  16. }
  17. }
  18. document.onmouseleave = document.onmouseup = function() {
  19. document.onmousemove = null;
  20. document.onmouseup = null;
  21. }
  22. document.onmouseup = function() {
  23. document.onmousemove = null;
  24. document.onmouseup = null;
  25. }
  26. }
  27. function fnMove(e, posX, posY) {
  28. var oDog = document.getElementById('dog'),
  29. l = e.clientX - posX,
  30. t = e.clientY - posY,
  31. winW = document.getElementById("backhome").offsetWidth,
  32. winH = document.getElementById("backhome").offsetHeight,
  33. maxW = winW - oDog.offsetWidth,
  34. maxH = winH - oDog.offsetHeight;
  35. if (l < 0) {
  36. l = 0;
  37. } else if (l > maxW) {
  38. l = maxW;
  39. }
  40. if (t < 0) {
  41. t = 0;
  42. } else if (t > maxH) {
  43. t = maxH;
  44. }
  45. oDog.style.left = l + 'px';
  46. oDog.style.top = t + 'px';
  47. }

发表评论

表情:
评论列表 (有 0 条评论,290人围观)

还没有评论,来说两句吧...

相关阅读

    相关 JS 事件

    1.drag等拖拽事件 > 拖放是由拖动与释放两部分组成,拖放事件也分为被拖动元素的相关事件,和容器的相关事件。 被拖动元素的相关事件如下所示: 被拖动元素相关事件:

    相关 js

    拖拽使用的三个事件 onmousedown //鼠标按下 onmousemove //鼠标移动 onmouseup //鼠标抬起

    相关 js遇到问题解决

    以下拖拽代码,遇到一个问题,点击拖拽狗狗后,鼠标松开,继续移动鼠标,狗狗仍是被拖拽状态,得再次点击鼠标,释放拖拽事件。 我百思不得其解,猜测是不是document.onmo

    相关 JS

    实现后效果 ![70][] 实现原理: 1. 在允许拖拽的节点元素上,监听mousedown(按下鼠标按钮)事件,鼠标按下后,事件触发 2. 监听mousemov