javascript - 有没有办法在拖动光标并按下鼠标时将 CSS 类添加到 DOM 元素?
问题描述
我正在尝试创建一个探路者可视化工具。到目前为止,我已经创建了一个具有以下功能的 16x45 网格:
export const drawBoard = () => {
const boardContainer: HTMLDivElement | null = document.querySelector(
".board-container"
);
if (boardContainer != null) {
// 16x45 board
for (let i = 0; i < 16; i++) {
const row = document.createElement("div");
row.classList.add("row");
for (let j = 0; j < 45; j++) {
const col = document.createElement("col");
col.classList.add("col");
col.setAttribute("data-row", `${i}`);
col.setAttribute("data-col", `${j}`);
row.appendChild(col);
col.addEventListener("click", function () {
this.classList.add("wall"); // Add a wall class to the CSS
});
}
boardContainer.appendChild(row);
}
}
};
此函数在我的文档中生成以下网格:
我可以获得特定图块的x
和y
位置,如下所示:
我已经添加click events
到所有这些瓷砖上。因此,当我单击一个图块时,一个wall
CSS 类会添加到该图块并用黑色填充它。
我的问题如下:
有没有办法在
wall
按下鼠标时将 CSS 类添加到图块中?是否有一个特殊的事件监听器?
这就是我想要实现的目标:
解决方案
您需要跟踪鼠标是否按下,并监听mousemove
. 像这样的东西应该工作:
//stores whether or not the mouse is down
let mouseDown = false;
document.addEventListener("mousedown" () => mouseDown = true);
document.addEventListener("mouseup" () => mouseDown = false);
export const drawBoard = () => {
const boardContainer: HTMLDivElement | null = document.querySelector(
".board-container"
);
if (boardContainer != null) {
// 16x45 board
for (let i = 0; i < 16; i++) {
const row = document.createElement("div");
row.classList.add("row");
for (let j = 0; j < 45; j++) {
const col = document.createElement("col");
col.classList.add("col");
col.setAttribute("data-row", `${i}`);
col.setAttribute("data-col", `${j}`);
row.appendChild(col);
//added mousemove listener
col.addEventListener("mousemove", function() {
//if mouse is down add class
mouseDown && this.classList.add("wall")
});
col.addEventListener("click", function() {
//do not need to check for mousedown
this.classList.add("wall")
});
}
boardContainer.appendChild(row);
}
}
};
推荐阅读
- apache-spark - 展平具有一个父列和一个子列的数据框
- ios - IONIC:我需要从 IOS 上的 InAppBrowser 获取 httpOnly cookie,
- blockchain - 为什么在币安链上执行交易需要大约 5-6 秒
- javascript - Javascript - 如何导出函数并在同一个 model.js 文件中使用它?
- javascript - 即使 enableRemoteModule 为 true,Electron.remote 也未定义
- excel - Excel VBA - 无法更改停靠的“查询和连接”的宽度
- apache-spark - 如何让 PySpark 在 Google Cloud Composer 上运行
- java - Gradle 在自定义运行任务中创建参数
- zimbra - 如何在 CentOS8 上制作 Smart Agenda Zimbra
- arrays - 如何在不删除旧状态的情况下设置对象的状态数组