javascript - 单击 Div 外部将其关闭。SVG 和 D3,角度
问题描述
我想单击 div 之外的任何位置来隐藏它。
我有一个 svg 背景,它上面有一个带节点的图。
我点击我的 SVG 上的一个节点(圆圈),如果点击了这个特定的“额外”节点,那么我会出现一个框,我会显示该框:
d3.select('#rightBox')
.attr('hidden', null);
d3.select('#leftBox')
.attr('hidden', null);
d3.select('#headerDiv')
.attr('hidden', null)
d3.select('#headerText')
.attr('hidden', null)
这是因为 div 在加载时是隐藏的。我没有使用 css display 属性,因为它不起作用!
问题是当我在身体上尝试 angular (click) = "functionThatHidesTheDiv" 并隐藏元素时,当然因为圆形节点是身体的一部分,那么盒子永远不会被打开?
我也使用角度。一旦元素没有隐藏,我如何单击 svg 上的任何位置,不包括 div 本身来隐藏它?
解决方案
您需要检查您的点击事件的“目标”是 div,还是在其中。
也许是这样的?
const svg = document.querySelector('.svg');
const circle = document.querySelector('.circle');
svg.addEventListener('click', (e) => {
if (!(e.target === circle) && !circle.contains(e.target)) {
console.log('Click outside');
} else {
console.log('Click inside');
}
});
.svg {
display: flex;
justify-content:center;
align-items: center;
width: 400px;
height: 400px;
background-color: tomato;
}
.circle {
width: 50px;
height: 50px;
border-radius: 50%;
background-color: tan;
}
<section>
<div class="svg">
<div class="circle"></div>
</div>
</section>
推荐阅读
- azure - Azure 消息总线未释放内存
- docker - 无法在 http+docker://localhost 连接到 Docker 守护程序 - 它正在运行吗?(特殊用例)
- java - 确定输入是 Parquet 还是平面文件
- arrays - 无法使用 Flutter 向 Firebase Firestore 中的数组添加或删除对象
- webstorm - 如何在 JetBrains WebStorm 2020.3.2 的单独窗口中显示项目
- angular - 开发和生产的不同浏览器列表?
- java - While循环中的后递减操作
- kubernetes - 使用 kubectl 生成 yaml 输出会导致拆分行
- java - 如何从属性文件中获取数据库凭据?
- ssis - Cosmos db Table API SSIS 组件或 ODBC 连接器?