首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何防止svg在触发鼠标的其它div上发生

如何防止svg在触发鼠标的其它div上发生
EN

Stack Overflow用户
提问于 2022-05-06 15:21:31
回答 2查看 73关注 0票数 0

我对mouseleave有个问题。(React/Typescript/CSS/HTML项目)。

Situation

(见下图)

我有两个div元素

代码语言:javascript
复制
<>
   <div id="main">
   <div>
   <div id="onHover" style={{display: "none"}}>
   </div>
</>

我在div main上找到了一个div main

代码语言:javascript
复制
return(
<svg className="click-through" pointer-events="none" width={1560} height={262}>
     <VictoryChart
         style={{
             parent: { pointerEvents: 'none' }
         }}
     >
        <VictoryArea
            style={{
                parent: { border: '1px solid #ccc', pointerEvents: 'none' }
            }}
        />
     </VictoryChart>
</svg>
)

目标:

div main

  • Upon在
  • 上盘旋时,div onHover应该显示在div main旁边,div onHover应该再次消失。

第一个目标没有问题,第二个目标是:由于svg**,** mouseleave 被触发得太早了,所以太早了。

整幅图片(虚线白线来自触发svgmouseleave,蓝色框为div main):

由于其他原因,svg不能落后于div main。现在如何确保svg行不触发mouseleave

更多信息

使用

  • 表示的svg --我使用victory js显示了svg具有click through属性的图形
  • ,并且大大简化了svg的情况,但解释了我的关键问题

F 249

EN

回答 2

Stack Overflow用户

发布于 2022-05-06 15:35:10

你有没有尝试将pointer-events: none;添加到SVG中?下面是一个示例(绿色框不会触发任何事件,但是蓝色的事件会触发):

代码语言:javascript
复制
const wrap = document.querySelector('.mouseleave');
wrap.addEventListener('mouseleave', () => {
  console.log(".mouseleave left");
});
代码语言:javascript
复制
.wrap {
  position: relative;
}
.mouseleave {
  height: 200px;
  border: 2px solid red;
}
.p-none, .p-default {
  height: calc(100% - 2rem);
  position: absolute;
  top: 1rem;
}
.p-none {
  pointer-events: none;
  border: 2px solid green;
  left: 1rem;
}
.p-default {
  border: 2px solid cyan;
  right: 1rem;
}
代码语言:javascript
复制
<div class="wrap">
  <div class="mouseleave"></div>
  <div class="p-none">pointer events: none</div>
  <div class="p-default">pointer events: default</div>
</div>

票数 0
EN

Stack Overflow用户

发布于 2022-05-06 15:36:49

需要在css中设置pointer-events: none属性。

但是,更现代(且性能非常好)的方法是使用PointerEvent而不是MouseEvent,并将事件绑定到所需的元素。这样,所有其他元素侦听器都不会触发。

代码语言:javascript
复制
element.setPointerCapture(ev.pointerId)
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/72143881

复制
相关文章

相似问题

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