首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Javascript onmousemove和onclick

Javascript onmousemove和onclick
EN

Stack Overflow用户
提问于 2019-09-19 01:19:52
回答 3查看 333关注 0票数 0

我想改变背景颜色,当鼠标被点击,并在元素上移动它的可能性,这样你就不必点击每个元素,但实例能够用鼠标‘绘制’。但我不知道该怎么做。我现在的代码是这样的

代码语言:javascript
复制
function change_color(x, y) {
  console.log(x, y);
  var elem = document.getElementById(x.toString() + "-" + y.toString());
  if (elem.style.backgroundColor == 'white')
    elem.style.backgroundColor = 'black';
  else
    elem.style.backgroundColor = 'white';
}
代码语言:javascript
复制
#board td {
  /*border: 1px solid rgb(175, 216, 248);*/
  width: 25px;
  height: 25px;
  border: 1px solid black;
  background-color: white;
}
代码语言:javascript
复制
<table id="board">
  <tr>
    <td id='0-0' onmousedown="change_color(0,0);"></td>
    <td id='0-1' onmousedown="change_color(0,1);"></td>
  </tr>
  <tr>
    <td id='1-0' onmousedown="change_color(1,0);"></td>
    <td id='1-1' onmousedown="change_color(1,1);"></td>
  </tr>
</table>

EN

回答 3

Stack Overflow用户

发布于 2019-09-19 01:31:59

您需要使用某种类型的变量来了解鼠标是否按下,并使用mousemove事件。

代码语言:javascript
复制
let isDown = false
document.body.addEventListener("mousedown", function () {
  isDown = true
});

document.body.addEventListener("mouseup", function () {
  isDown = false
});

document.getElementById("grid").addEventListener("mousemove", function (evt) {
  if (isDown) evt.target.classList.add("active")
})
代码语言:javascript
复制
table {
  border-spacing: 0;
  border-collapse: collapse;
  empty-cells: show;
}

td{
  width: 10px;
  height: 10px;
  background-color: white;
  border: 1px dotted #eee;
}

td.active {
  background-color: black
}
代码语言:javascript
复制
<table id="grid">
  <tr>
    <td></td><td></td><td></td><td></td><td></td>
    <td></td><td></td><td></td><td></td><td></td>
  </tr>
  <tr>
    <td></td><td></td><td></td><td></td><td></td>
    <td></td><td></td><td></td><td></td><td></td>
  </tr>
  <tr>
    <td></td><td></td><td></td><td></td><td></td>
    <td></td><td></td><td></td><td></td><td></td>
  </tr>
  <tr>
    <td></td><td></td><td></td><td></td><td></td>
    <td></td><td></td><td></td><td></td><td></td>
  </tr>
  <tr>
    <td></td><td></td><td></td><td></td><td></td>
    <td></td><td></td><td></td><td></td><td></td>
  </tr>
</table>

票数 1
EN

Stack Overflow用户

发布于 2019-09-19 01:22:42

我认为您正在寻找onmousemove来调用函数。每次调用该函数时(即每次鼠标移动时),您可以检查鼠标按钮是否按下,然后更改像素的颜色。

更多信息请点击此处:https://developer.mozilla.org/en-US/docs/Web/API/GlobalEventHandlers/onmousemove

票数 0
EN

Stack Overflow用户

发布于 2019-09-19 01:29:08

我会做一些改变。

  1. 尝试使用类而不是内联样式。这允许您使用简单的classList.toggle().
  2. I'd切换类使用addEventListener而不是内联在元素本身上附加事件,这既是为了整洁,也是为了减少重复代码。
  3. 您可以使用e.which来确定当鼠标悬停在元素上时鼠标是否按下。如果为e.which === 1,则按下鼠标主键。

代码语言:javascript
复制
document.querySelectorAll("#board td").forEach((e) => { //for each board td
  e.addEventListener("mouseover", change_color);        //change color on hover
  e.addEventListener("mousedown", change_color);        //change color on click
});

function change_color(e) {
  if (e.which !== 1) return;             //exit if mouse isn't down
  e.target.classList.toggle('black');    //toggle black background
}
代码语言:javascript
复制
#board td {
  width: 25px;
  height: 25px;
  border: 1px solid black;
  background-color: white;
}

#board td.black { background-color: black; }
代码语言:javascript
复制
<table id="board">
  <tr>
    <td></td>
    <td></td>
    <td></td>
    <td></td>
    <td></td>
    <td></td>
  </tr>
  <tr>
    <td></td>
    <td></td>
    <td></td>
    <td></td>
    <td></td>
    <td></td>
  </tr>
  <tr>
    <td></td>
    <td></td>
    <td></td>
    <td></td>
    <td></td>
    <td></td>
  </tr>
</table>

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/57997908

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档