代码之家  ›  专栏  ›  技术社区  ›  Alex

Firefox 3.6点击测试重叠的SVG形状

  •  1
  • Alex  · 技术社区  · 15 年前

    我正在绘制2条SVG路径,就像谷歌地图绘制方向一样。

    我遇到的问题是,第一条路径中被第二条路径的边界框重叠的部分不会触发鼠标悬停、鼠标悬停或单击事件。即使事件处理程序位于path dom元素上,当鼠标位于路径边界框内的任何位置时,事件似乎也会激发。

    还有什么可以避免的吗?在Chrome、Safari和Opera上,我没有这个问题。它只是火狐中的SVG。

    我已经创建了一个测试示例。当你把鼠标移过一个圆圈时,它应该提醒你它的颜色。你会看到,如果你从右边接近绿色的圆圈,它会起作用,因为它落在了红色圆圈容器的300px宽度之外。但是,如果你从绿色圆圈的顶部或底部接近,你将一无所获。现在,在chrome/safari/opera中尝试相同的操作,您将看到它按预期工作。

    <?xml version="1.0" encoding="UTF-8" ?>
    <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"> 
    <html xmlns="http://www.w3.org/1999/xhtml" 
          xmlns:svg="http://www.w3.org/2000/svg"
          xmlns:xlink="http://www.w3.org/1999/xlink"> 
    <head> 
     <title>SVG embedded inline in XHTML</title>
    
     <script type="text/javascript">
      window.onload = function () {
       var red = document.getElementById('red-circle');
       var green = document.getElementById('green-circle');
    
    
       red.onmouseover = function (e) {
        alert('red mouse over');
       };
       green.onmouseover = function (e) {
        alert('green mouse over');
       };
      };
     </script>
    </head> 
    <body> 
    
     <svg:svg style="position: absolute; top: 0px; left: 110px; z-index: 0;" version="1.1" baseProfile="full" width="300px" height="200px">
      <svg:circle id="green-circle" cx="150px" cy="100px" r="50px" fill="green" /> 
     </svg:svg>  
    
     <svg:svg style="position: absolute; top: 0px; left: 0px; z-index: 0;" version="1.1" baseProfile="full" width="300px" height="200px">
      <svg:circle id="red-circle" cx="150px" cy="100px" r="50px" fill="#ff0000" /> 
     </svg:svg>
    </body> 
    </html> 
    
    1 回复  |  直到 15 年前
        1
  •  0
  •   Ringding    15 年前

    我可以用火狐4复制这个。您可以在DOM层次结构的更高级别上安装事件处理程序,并使用事件的 target 用于区分图形元素的字段。

    推荐文章