javascript - 如何捕获鼠标悬停事件上的鼠标左键?

标签 javascript dom-events

当用户将鼠标悬停在使用 vanilla javascript 的 html 表格中的单元格上时,我试图捕获用户按下鼠标左键的情况。目的是当用户在拖动时单击鼠标时将单元格绘制为黑色(例如在 MsPaint 中绘制一条线时绘制)

我在表格的每个 td 上添加了一个“over”事件监听器,并使用按钮属性来检查左按钮是否被按下:

celle = document.getElementsByTagName("td");
for (i=0;i<celle.length;i++)
celle[i].addEventListener("mouseover", function(e){
if(e.buttons == 1 ){
    e.target.style.backgroundColor="black";
}
})

这段代码可以工作,但并不总是有效,而且并不完美。首先,它开始设置下一个元素的背景颜色,而不是我按下鼠标的元素的背景颜色。而且,有时它根本不设置任何颜色(Chrome 的窗口中有一个类似“访问被拒绝”的小图标)。它的工作方式似乎相当随机且不可预测。

我也尝试过使用 jQuery,但发现了类似的问题。有人可以帮助我吗? 非常感谢

最佳答案

将问题分成几个部分。我将向整个窗口添加一个 mousedownmouseup 事件监听器,并在您当前正在绘图时设置全局状态:

var drawState=false
window.addEventListener("mousedown",function(e){
if(e.button===1){
   drawState = true;
}});

window.addEventListener("mouseup",function(e){
if(e.button===1){
   drawState = false;
}});

如果鼠标位于单元格上方,您可以通过一些检查来改进窗口监听器。

此后,您可以向所有单元格添加一个 mouseenter 监听器。 Mouseenter 仅在您进入单元格后才会触发,而不是在元素内的每次移动时触发:

celle[i].addEventListener("mouseenter", function(e){
   if(drawState){
      e.target.style.backgroundColor="black";
   }
})

关于javascript - 如何捕获鼠标悬停事件上的鼠标左键?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56199283/

相关文章:

javascript - 使用 Javascript 单击按钮读取并显示文本文件内容

javascript - 克隆元素及其所有事件

javascript - Chrome : "open link in new tab" not firing the click event?

javascript - 如何替换 block /段落前后的字符?

javascript - 每次通过都向 DOM 添加增加的计数

javascript - 如何在 HTML 文本框中显示标签?

提交表单时在浏览器中显示的 JavaScript 代码,而不是脚本的结果

javascript - 在 if 语句中访问数组

javascript - 修复谷歌浏览器上的蓝线

javascript - event.keyCode 常量