拖动html元素时检测mouseenter事件

新旺5

我正在尝试使用统一的正方形图像制作一个拖放益智网站,并且编写了拖动代码以按<img>元素拖动单个图像

但是我注意到,在将一个<img>元素拖到另一个带有addEventListener("mousenter", function () {//code};)附加元素的元素上时,mouseenter事件不会触发。如果我将鼠标移到元素上而不拖动图像,则事件将正常触发。

是否有人对如何解决此问题有任何想法?我唯一的猜测atm是该<img>元素阻止了侦听器看到鼠标。

var dragImg = document.querySelector(".images img");

dragImg.addEventListener("mousedown", function () {
  console.log("mousedown detected " + dragImg.clientHeight);
  dragImg.setAttribute("id", "drag");
  dragging = true;
});

dragImg.addEventListener("mousemove", function (event) {
  if (dragging) {
    dragImg.style.top = (event.clientY - dragImg.clientHeight/2) + "px";
    dragImg.style.left = (event.clientX - dragImg.clientWidth/2) + "px";
  }
});

dragImg.addEventListener("mouseup", function () {
  console.log("mouseup detected");
  dragging = false;
  //reset position if not in clipboard
  dragImg.removeAttribute("id");
  dragImg.style.top = "";
  dragImg.style.left = "";
});

//Clipboard behavior - This listener doesn't fire when dragging an img?
var clipboard = document.querySelector(".clipboard");
clipboard.addEventListener("mouseover", function () {
  if (dragging) {
    console.log("mouse entered clipboard!");
    clipboard.style.backgroundColor = "red";
  }
});
#drag {
    position: absolute;
}
莫什·费

问题是鼠标永远不会悬停鼠标.clipboard指针因为图像始终位于指针下方。

一个简单的解决方案是添加pointer-events:none;(旧版本的浏览器不支持)。

var dragImg = document.querySelector(".images img");
var dragging = false;

dragImg.addEventListener("mousedown", function (event) {
  event.stopPropagation();
  console.log("mousedown detected " + dragImg.clientHeight);
  dragImg.setAttribute("id", "drag");
  dragging = true;

  document.addEventListener('mousedown', function documentMouseDown(){
    if (dragging) {
      dragImg.removeAttribute("id");
      dragging = false;

      document.removeEventListener('mousedown', documentMouseDown);
    }
  });
});

document.addEventListener("mousemove", function (event) {
  if (dragging) {
    dragImg.style.top = (event.clientY - dragImg.clientHeight/2) + "px";
    dragImg.style.left = (event.clientX - dragImg.clientWidth/2) + "px";
  }
});

dragImg.addEventListener("mouseup", function () {
  console.log("mouseup detected");
  dragging = false;
  //reset position if not in clipboard
  dragImg.removeAttribute("id");
  dragImg.style.top = "";
  dragImg.style.left = "";
});

//Clipboard behavior - This listener doesn't fire when dragging an img?
var clipboard = document.querySelector(".clipboard");
clipboard.addEventListener("mouseover", function () {
  if (dragging) {
    console.log("mouse entered clipboard!");
    clipboard.style.backgroundColor = "red";
  }
});
#drag {
  position: absolute;
  pointer-events:none;
}

.clipboard {
  width:200px;
  height:200px;
  background:green;
}

img {
  -webkit-user-select:none;
}
<div class="clipboard"></div>
<div class="images">
  <img src="http://i.stack.imgur.com/NghNQ.jpg" />
</div>

http://jsbin.com/hugewi/edit?html,css,js

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

当光标隐藏在其他HTML元素后面时,如何触发mouseenter事件?

来自分类Dev

当光标隐藏在其他HTML元素后面时,如何触发mouseenter事件?

来自分类Dev

从子元素输入父项时,不会触发MouseEnter事件

来自分类Dev

当在触摸设备上检测到触摸和拖动时,如何改变元素的宽度和元素?

来自分类Dev

如果拖动时发生过渡,则事件检测坐标不会更新

来自分类Dev

Fullcalender:事件在拖动时隐藏

来自分类Dev

如何检测HTML中相邻元素上的鼠标事件

来自分类Dev

如何取消检测/忽略某个html元素中的javascript事件?

来自分类Dev

拖动时更改HTML5可拖动元素的“克隆”文本

来自分类Dev

关于背景svg元素的mouseenter事件

来自分类Dev

Mouseover / Mouseenter事件超出元素范围

来自分类Dev

绝对定位元素上的 Mouseenter 事件

来自分类Dev

在 Angular 中拖动时触发 mouseenter 和 mouseleave

来自分类Dev

使用HTML5拖放防止拖动事件干扰Firefox中的输入元素

来自分类Dev

使用HTML5拖放防止拖动事件干扰Firefox中的输入元素

来自分类Dev

拖动元素时将内部html拖放到另一个元素中

来自分类Dev

Mouseenter事件处于启用状态,而拖动事件存在严重问题

来自分类Dev

当动画元素触摸鼠标时触发mouseenter

来自分类Dev

当孩子在jQuery中拖动时,如何触发父拖动事件?

来自分类Dev

单击并拖动时的jQuery mouseup事件

来自分类Dev

如何防止拖动时触发滑动事件

来自分类Dev

单击并拖动时的jQuery mouseup事件

来自分类Dev

拖动对象时启用其他事件

来自分类Dev

单击时正在触发拖动事件

来自分类Dev

为什么在可拖动事件中显示和隐藏捕捉对象时,可拖动元素不响应捕捉选项?

来自分类Dev

HTML如何在画布元素上拖动时防止意外的页面选择?

来自分类Dev

jQuery UI可拖动:在拖动停止时获取底层元素

来自分类Dev

拖动父级时拖动子元素-jQuery UI Draggable

来自分类Dev

拖动时设置jQuery可拖动元素的位置

Related 相关文章

  1. 1

    当光标隐藏在其他HTML元素后面时,如何触发mouseenter事件?

  2. 2

    当光标隐藏在其他HTML元素后面时,如何触发mouseenter事件?

  3. 3

    从子元素输入父项时,不会触发MouseEnter事件

  4. 4

    当在触摸设备上检测到触摸和拖动时,如何改变元素的宽度和元素?

  5. 5

    如果拖动时发生过渡,则事件检测坐标不会更新

  6. 6

    Fullcalender:事件在拖动时隐藏

  7. 7

    如何检测HTML中相邻元素上的鼠标事件

  8. 8

    如何取消检测/忽略某个html元素中的javascript事件?

  9. 9

    拖动时更改HTML5可拖动元素的“克隆”文本

  10. 10

    关于背景svg元素的mouseenter事件

  11. 11

    Mouseover / Mouseenter事件超出元素范围

  12. 12

    绝对定位元素上的 Mouseenter 事件

  13. 13

    在 Angular 中拖动时触发 mouseenter 和 mouseleave

  14. 14

    使用HTML5拖放防止拖动事件干扰Firefox中的输入元素

  15. 15

    使用HTML5拖放防止拖动事件干扰Firefox中的输入元素

  16. 16

    拖动元素时将内部html拖放到另一个元素中

  17. 17

    Mouseenter事件处于启用状态,而拖动事件存在严重问题

  18. 18

    当动画元素触摸鼠标时触发mouseenter

  19. 19

    当孩子在jQuery中拖动时,如何触发父拖动事件?

  20. 20

    单击并拖动时的jQuery mouseup事件

  21. 21

    如何防止拖动时触发滑动事件

  22. 22

    单击并拖动时的jQuery mouseup事件

  23. 23

    拖动对象时启用其他事件

  24. 24

    单击时正在触发拖动事件

  25. 25

    为什么在可拖动事件中显示和隐藏捕捉对象时,可拖动元素不响应捕捉选项?

  26. 26

    HTML如何在画布元素上拖动时防止意外的页面选择?

  27. 27

    jQuery UI可拖动:在拖动停止时获取底层元素

  28. 28

    拖动父级时拖动子元素-jQuery UI Draggable

  29. 29

    拖动时设置jQuery可拖动元素的位置

热门标签

归档