javascript - SVG鼠标事件在Firefox4中有效,但在IE8中无效

标签 javascript firefox svg internet-explorer-8 dom-events

我有一个独立的SVG文件和一个单独的Javascript文件,用于处理从SVG文件触发的鼠标事件。该项目在Firefox上运行良好,但是在管理鼠标事件时我以某种方式遇到了IE问题:我收到此错误消息:


  “ clientx为null或不是对象”。


SVG图像虽然可以打印。

您是否知道我的代码有什么问题(请参见下文)?

SVG文件

<?xml version="1.0" standalone="no"?>
<svg width="1100" height="5990" version="1.1" xmlns="http://www.w3.org/2000/svg"   xmlns:xlink="http://www.w3.org/1999/xlink" onload="init(evt)" >
<script xlink:href="desc.js"/>

<g onmouseout="h(evt)">" stroke-width="1"/>
<polygon points="35,20 86,20 96,35 86,50 35,50" style="fill:grey"    onmousemove="s(evt,'someTxt')" onclick="m(evt, 'NGR_a00010')"/>
<polygon points="99,20 138,20 148,35 138,50 99,50" style="fill:grey" onmousemove="s(evt,'someTxt someTxt')" onclick="m(evt, 'NGR_a00020')"/>
</g>

<rect class="tooltip_bg" id="tooltip_bg"   x="0" y="0" rx="4" ry="4"  width="55" height="17" visibility="hidden"/> 
  <text class="tooltip" id="tooltip" x="0" y="0" visibility="hidden">Tooltip</text> 
</svg>


Java脚本

function init(evt)
{
    if ( window.svgDocument == null )
    {
    svgDocument = evt.target.ownerDocument;
    }

    tooltip = svgDocument.getElementById('tooltip');
    tooltip_bg = svgDocument.getElementById('tooltip_bg');
}


function s(evt, mouseovertext)
{
    var posx = 0;
var posy = 0;
if (!evt) var e = window.event;
if (evt.pageX || evt.pageY)     {
    posx = evt.pageX;
    posy = evt.pageY;
}
else if (e.clientX || e.clientY)    {
    posx = evt.clientX + document.body.scrollLeft
        + document.documentElement.scrollLeft;
    posy = evt.clientY + document.body.scrollTop
        + document.documentElement.scrollTop;
}

  tooltip.setAttributeNS(null,"x",posx+11);
    tooltip.setAttributeNS(null,"y",posy+27);
    tooltip.firstChild.data = mouseovertext ;
    tooltip.setAttributeNS(null,"visibility","visible");

    length = tooltip.getComputedTextLength();
    tooltip_bg.setAttributeNS(null,"width",length+8);
    tooltip_bg.setAttributeNS(null,"x",posx+8);
    tooltip_bg.setAttributeNS(null,"y",posy+14);
    tooltip_bg.setAttributeNS(null,"visibility","visibile");        
}

function h(evt)
{
    tooltip.setAttributeNS(null,"visibility","hidden");
    tooltip_bg.setAttributeNS(null,"visibility","hidden");
}

  function g(evt, locus_tag)
  {
window.open("http://www.ncbi.nlm.nih.gov/gene?term=" + locus_tag);
  }


  function m(evt, txt)
  {
if (evt.type == "click" && evt.detail == 2)//if we got a double click, for some reason onblclick does not work
  {          
  window.open("http://www.ncbi.nlm.nih.gov/gene?term=" + txt);
      } 
  }

最佳答案

IE8不支持SVG。

有可用的Javascript工具可以帮助您解决此问题,但它本来就不支持。

在我提到的工具中,我最喜欢的是Raphael,但是Raphael是一个用于绘制图形的库。由于您的代码中已经包含SVG,因此您可能会发现一个简单的转换库更有用。可能是其中之一:http://code.google.com/p/svg2vml/或以下内容:http://code.google.com/p/svgweb/

由于您说的是SVG图片在您的页面中正常工作,我想说您可能已经在使用这些工具中的一种或另一种(可能是我上面链接的工具之一,也可能是另一种)–其中有很多工具)。但是我的猜测是您使用的工具不包括使用Javascript操纵SVG对象的支持。

因此,如果需要此功能,可能需要尝试其他工具。

关于javascript - SVG鼠标事件在Firefox4中有效,但在IE8中无效,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23470222/

相关文章:

javascript - 如何获得一致的数字排序结果?

svg - Elm:向 SVG 元素添加点击事件不起作用——这可能吗?

javascript - Jquery为所有id添加选项

javascript - 如何在 JavaScript 中创建内存泄漏和监控内存使用情况

Firefox 附加组件、扩展、插件

asp.net - 如何使用 ASP.NET 查找用户的地理位置?

javascript - 将 Raphael SVG 转换为图像(png 等)客户端

image - 如何在 svg 图像中使用数据 blob

javascript - Bootstrap Modal 无法打开 .hidden --> .show 尚未打开时

javascript - 无论如何,将参数保存在函数内,直​​到通过使用新参数调用同一函数来替换它?