简体   繁体   English

SVG 除元素外的鼠标事件透传

[英]SVG Mouse Event Passthrough except for elements

I have a transparent SVG canvas as an overlay to other elements.我有一个透明的 SVG canvas 作为对其他元素的覆盖。 What I want is to allow mouse event pass through to the elements below, but events on the visible svg elements to also work.我想要的是允许鼠标事件传递到下面的元素,但可见 svg 元素上的事件也可以工作。 I can get it so the svg captures events, or lets them though with css pointer-events (none|auto) on the svg element, but can't work out how to capture events only on the visible elements of the svg.我可以得到它,以便 svg 捕获事件,或者让它们通过 svg 元素上的 css 指针事件(无|自动),但无法弄清楚如何仅在 svg 的可见元素上捕获事件。

I create the svg elements dynamically, eg我动态创建 svg 元素,例如

C=document.createElementNS("http://www.w3.org/2000/svg","circle")
C.setAttributeNS(null,"r",curve_radius)
C.setAttributeNS(null,"cx",x)
C.setAttributeNS(null,"cy",y)
C.setAttributeNS(null,"fill","rgb(0,0,255)")
C.setAttributeNS(null,"stroke","rgb(0,0,255)")     
C.setAttributeNS(null,"stroke-width","1")

svg.appendChild(C) ;

You foundpointer-events .您找到了pointer-events I think it is just a matter of tweaking it in the right way.我认为这只是以正确的方式调整它的问题。 Here I "disable" pointer-events on the <svg> and at the same time specifying that the stroke of the <circle> should take event.在这里,我“禁用”了<svg>上的指针事件,同时指定了<circle>的笔划应该发生事件。

 document.getElementById('bg').addEventListener('click', e => { console.log(e.target.nodeName); });
 #bg { background-color: orange; position: relative; width: 200px; height: 200px; } svg { pointer-events: none; position: absolute; } circle { pointer-events: stroke; } p { position: absolute; top: 100px; left: 40px; }
 <div id="bg"> <p>Text</p> <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 10 10" width="200"> <circle cx="5" cy="5" r="4" stroke="red" fill="none"/> </svg> </div>

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM