有没有办法在重叠元素上有选择地使用鼠标事件?

时间:2019-01-03 22:45:32

标签: javascript css angular angular-material dom-events

我有一个应该处理所有单击事件的滑块组件。我使用绝对定位在此滑块上覆盖了一些工具提示图标。我希望能够将鼠标悬停在工具提示图标上并触发其鼠标悬停事件,但我不希望这些图标阻止滑块上的单击。

有什么想法吗?

对于滑块,我使用的是Angular Materials的“垫子滑块”。对于图标,我有使用matTooltip的垫图标。

我认为这个问题不一定真的是特定于Angular的,但我将不胜感激:)

没有太多代码要显示,但这是滑块的外观图像。评论图标可能会阻止单击滑块。现在,我有使用此类的注释图标:

.comment-icon {
position: absolute;
z-index: -1;
}

1 个答案:

答案 0 :(得分:0)

这是一个艰难的过程,因为类似pointer-events: none;这样的东西会阻止悬停,甚至JS也无法监听鼠标悬停事件。

您可以做的是在工具提示中添加一个点击侦听器,如果鼠标位置在滑块的边界内,它也会触发点击事件。

类似的东西:

document.querySelector('.comment-icon').addEventListener('click', e => {
    const slider = document.querySelector('.slider');
    const sliderBounds = slider.getBoundingClientRect();

  if (e.clientX >= sliderBounds.left && e.clientX <= sliderBounds.right
    && e.clientY >= sliderBounds.top && e.clientY <= sliderBounds.bottom) {
        slider.click();
  }
});

这里是一个小提琴:http://jsfiddle.net/wfpv5oka/2/