javascript - 单击 SVG 元素有时不起作用
问题描述
我有一个固定位置的模态,它有X
要关闭的图标,我还实现了clickOutside
逻辑,当你在模态之外单击它会关闭它,它是这样写的
import React, { useEffect } from "react";
const useClickOutside = (
refs: Array<React.MutableRefObject<HTMLElement | null>>,
handler: (event: any) => any
) => {
useEffect(() => {
const listener = (event: MouseEvent | TouchEvent) => {
for (let ref of refs) {
if (event.target instanceof HTMLElement && (!ref.current ||
ref.current.contains(event.target))) {
return;
}
}
handler(event);
};
document.addEventListener("mousedown", listener);
document.addEventListener("touchstart", listener);
return () => {
document.removeEventListener("mousedown", listener);
document.removeEventListener("touchstart", listener);
};
}, [refs, handler]);
};
export default useClickOutside;
虽然这个钩子有效,但在这种特定情况下它通常会失败,当我单击 SVG 元素时,此代码会被触发并且模式关闭,我只是将位置固定到此钩子的父元素的引用作为引用传递。值得注意的是,当我添加z-index: -1
到 SVG 元素时,问题得到了解决,或者pointer-events: none
,为什么会发生这种情况,我已经读到 SVG 具有不同的点击上下文,但从这个角度来看,我看不出有什么问题。
解决方案
推荐阅读
- c - 包含与主 c 文件位于同一文件夹中的 C 文件
- c# - 如何在 C# 中异步调用 Web 方法?
- javascript - 没有点击反应路线不会显示
- json - Grafana 导入一个简单的 json 文件作为数据源
- postgresql - 如何将新列添加到 postgres 中的分区表
- excel - 在 Excel 中使用高级查找函数
- google-apps-script - Google Apps 脚本:未定义参考错误 getValue
- pdf - Ghostscript 不会压缩所有 PDF
- c# - 如何将自 1970 年 1 月 1 日以来的秒数转换为日期时间值?
- angular - 使用 Azure AD B2C 时向 Angular SPA 和 MSAL 添加角色