【发布时间】:2018-07-11 23:47:19
【问题描述】:
我正在尝试将点击事件添加到具有可见溢出的 SVG 元素和其中溢出 SVG 的形状元素(圆/路径)。
在 Safari(9,10,11) 上,单击事件在形状元素(圆/路径)溢出的区域中不起作用,而在 SVG 中存在的区域中可以正常工作。
var count = 0;
function clickMe() {
console.log("in click func");
count++;
document.getElementById("counter").innerHTML = count;
}
#counter {
font-size: 2em;
}
#starSvg {
pointer-events: auto;
overflow: visible;
position: absolute;
left: 200px;
top: 250px;
border: 1px solid red;
}
#starPolygon {
overflow: visible;
fill: rgba(0, 153, 219, 1);
pointer-events: visiblePainted;
stroke-width: 4;
stroke-linecap: square;
stroke-linejoin: round;
stroke: rgba(219, 0, 153, 1);
cursor: pointer;
shape-rendering: geometricPrecision
}
p {
margin: 10px 0;
}
<div>
<p>Open this webpage on Chrome & safari</p>
<p>On Chrome: Click work on all four hands of the star.</p>
<p>On Safari: Click works only on the hands inside the red area(SVG bounding Rect).</p>
<p style="position: absolute; top: 100px; left: 200px;">Click Event Counter:
<span id="counter">0</span>
</p>
<div class="containter">
<svg onclick="clickMe()" id="starSvg" width="100%" height="100%">
<g width="100%" height="100%" transform="" style="overflow: visible; transform: rotate(45deg) translate(0, 0);">
<polygon id="starPolygon" shape-rendering="geometricPrecision" points="0 -90,15 -15,90 0,15 15,0 90,-15 15,-90 0,-15 -15"></polygon>
</g>
</svg>
</div>
</div>
这也是 Safari 中的错误吗?点击事件在包括 IE 在内的所有浏览器中都能正常工作。
【问题讨论】:
-
@Andreas 我已将代码添加到问题中。谢谢你纠正我。
-
id="starPolygon"="geometricPrecision" 这不是一个错误,如果它应该是什么
-
你能在 Safari 上试试 jsfiddle.net/bp1r597e 吗?我无法测试。
-
是的,这是一个错误,不过很容易解决,只需将 SVG 放大,以免溢出。
-
@SriramR,如果您无法移动点击事件或编辑多边形的路径/原点坐标,您能否指定您可以更改的内容?
标签: javascript html css svg