javascript - 重叠 SVG 元素上的鼠标事件

标签 javascript svg raphael dom-events

如何处理重叠 svg 元素上的点击事件?我正在使用 Reaphael.js 库。

问题是 top <svg> DOM 元素正在拦截鼠标事件,即使底部元素没有被任何绘图重叠。我的问题是如何使我的示例中的两个圆圈都可点击并仍然将它们保留在两个 svg 元素中?

这是我的代码:

CSS:

#container {
  position: relative;
  width: 200px;
  height: 200px
}

#container>svg {
  position: absolute !important;
  top: 0;
  left: 0;
}

JavaScript:

var topLayer = Raphael('container', 200, 200);

var bottomLayer = Raphael('container', 200, 200);

topLayer.circle(100, 100, 50)
  .attr({
    fill: 'red',
    stroke: false
  })
  .mousedown(function(){alert('Top layer')});

bottomLayer.circle(120, 120, 50)
  .attr({
    fill: 'pink',
    stroke: false
  })
  .mousedown(function(){alert('Bottom layer')});

工作 JSFiddle例子

PS:我知道我可以在单个<svg>中实现分层DOM 元素,但事实并非如此。我的底部 SVG 元素具有缩放和平移功能,而顶部 SVG 元素应该是静态的。

最佳答案

您可以通过将其设置为 none 来操纵名为 pointer-events 的 css 属性。这将导致允许所有事件流过标有 pointer-events:none 的层。

可以看到this fiddle :https://jsfiddle.net/krul/6SmQ9/2/

#container {
    pointer-events:none;
    position: relative;
    width: 200px;
    height: 200px
}
#container>svg {
    pointer-events:none;
    position: absolute !important;
    top: 0;
    left: 0;
}
svg circle {
    pointer-events:visible;    
}

关于javascript - 重叠 SVG 元素上的鼠标事件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18822756/

相关文章:

javascript - 根据eslint配置保存时在atom编辑器中美化js代码

javascript - Jquery 自动完成,href 可点击

css - 禁用移动和平板设备上的悬停

html - CSS 和 Bootstrap : Create a line that connects rows

javascript - 矩形 SVG 对象/Raphael JS 的快速信息

javascript - 光滑的 slider 宽度错误

canvas - 将 SVG ARCTO 映射到 HTML Canvas ARCTO

javascript - 当我将 SVG 转换为 Raphael JS 对象时,路径不显示

javascript - 这个匿名函数是如何/何时被调用的?

javascript - Three.js 带摄像头选择对象,无鼠标