javascript - 单击拖动和onClick反应?
问题描述
我正在建一张桌子。当用户单击并拖动单元格时,之间的单元格会突出显示。但我不知道为什么当我单击单个单元格时,它也会在我单击的最后一个单元格和新单元格之间突出显示。我想当我点击它时只在一个单元格上突出显示
这是我的代码:
import React, {useState} from "react";
import './Style.css';
export default function Table() {
let div = [];
const [start, setStart] = useState(null);
const [end, setEnd] = useState(null);
const [selecting, setSelecting] = useState(false);
let beginSelection = i => {
setSelecting(true);
setStart(i);
updateSelection(i);
};
let endSelection = (i = end) => {
setSelecting(false);
updateSelection(i);
};
let updateSelection = i => {
if(selecting) {
setEnd(i);
}
};
for(let i = 0; i <= 31; i++ ) {
let a = (
<span
key={i}
className={
((end != null && start != null) && (end <= i && i<= start || (start <= i && i <= end)) ? "selected": "")
}
onMouseDown={()=>beginSelection(i)}
onMouseUp={()=>endSelection(i)}
onMouseMove={()=>updateSelection(i)}
>
{i}
</span>
);
div.push(a);
}
return div;
}
这是我的完整代码和演示:https ://codesandbox.io/s/github/Kalipts/table_grid 请帮助我。谢谢
解决方案
问题是您设置启动 onMouseDown 并仅在 onMouseMove 上更新它。因此,您可以通过在 onMouseDown 事件中重置开始和结束来解决您的问题:
let beginSelection = i => {
setSelecting(true);
setStart(i);
setEnd(i);
updateSelection(i);
};
推荐阅读
- java - 无法使用 processbuilder 运行 java 命令
- python - 如何验证从桌面应用程序中的链接文本按钮打开的网页响应代码
- google-apps-script - 在 Google 应用程序脚本 MailApp.sendEmail 中使用多个 cc 和/或 bcc
- typescript - 泛型类型返回不接受包含相同定义字段的对象
- date - 通过的季度百分比
- javascript - 在 Javascript 或 jquery 中键入功能时进行搜索?
- ios - Swift PHImageManager 照片库图像在选择集合视图单元格后获取 PHImageManagerMaximumSize
- sql - 当表中的记录数是指定限制数的倍数时,如何使用 ref 游标获取集合?
- geometry - 检查圆周运动的边缘
- flutter - 在颤动的警报对话框中显示选定的图像