【问题标题】:Javascript inside SVG Image doesn't get executedSVG 图像中的 Javascript 没有被执行
【发布时间】:2013-04-29 22:14:06
【问题描述】:

我一直在尝试用一些基本的 javascript 编写一个 svg 文件。 使用事件 onmouseover() 更改 svg 元素(路径)的边框颜色,但我遇到的问题是代码甚至没有被执行。 这是我的代码和我的 svg 文件的样子:

<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<!-- Created with Inkscape (http://www.inkscape.org/) -->

<svg
   xmlns:dc="http://purl.org/dc/elements/1.1/"
   xmlns:cc="http://creativecommons.org/ns#"
   xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
   xmlns:svg="http://www.w3.org/2000/svg"
   xmlns="http://www.w3.org/2000/svg"
   xmlns:xlink="http://www.w3.org/1999/xlink"
   xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
   xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
   width="1428.1428"
   height="1259.5714"
   id="svg2"
   version="1.1"
   inkscape:version="0.48.4 r9939"
   sodipodi:docname="planniveau1.svg">
  <defs
   id="defs4" />
  <sodipodi:namedview
     id="base"
     pagecolor="#ffffff"
     bordercolor="#666666"
     borderopacity="1.0"
     inkscape:pageopacity="0.0"
    inkscape:pageshadow="2"
     inkscape:zoom="0.35355339"
     inkscape:cx="861.1875"
     inkscape:cy="599.88672"
     inkscape:document-units="px"
     inkscape:current-layer="layer3"
     showgrid="false"
     fit-margin-top="0"
     fit-margin-left="0"
     fit-margin-right="0"
     fit-margin-bottom="0"
     inkscape:snap-global="false"
     inkscape:window-width="1280"
     inkscape:window-height="738"
     inkscape:window-x="-8"
     inkscape:window-y="-8"
     inkscape:window-maximized="1" />
  <metadata
     id="metadata7">
    <rdf:RDF>
      <cc:Work
         rdf:about="">
        <dc:format>image/svg+xml</dc:format>
        <dc:type
           rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
         <dc:title />
       </cc:Work>
    </rdf:RDF>
  </metadata>
  <g
     inkscape:groupmode="layer"
     id="layer3"
     inkscape:label="escaliers"
     style="display:inline">

    <path
       style="fill:none;stroke:#d4322d;stroke-width:5;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:0.49803922;stroke-dasharray:none"
       d="m 582,676.57141 c -98.5,0.5 -98.5,0.5 -98.5,0.5 l 0,57.5 99.5,0 z"
       id="path1"
       inkscape:connector-curvature="0"
        sodipodi:nodetypes="bbbbb" onclick="changeborder(path1)"/>

  </g>
  <script type="application/javascript"><![CDATA[
function changeborder(path3073)
{
var path = document.getElementById('path1');
path.setAttribute('style','fill:none;stroke:#fe9900;stroke-width:5;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:0.49803922;stroke-    dasharray:none');
}
]]></script>
</svg>

所以我想要做的是将 style.stroke:#d4322d 更改为 style.stroke:#fe9900

如果你能帮忙那就太好了 这是我第一次使用 svg 文件,所以你能原谅你在我的代码中发现的任何明显的错误吗:)

【问题讨论】:

  • 我自己没有在 SVG 中练习过 JS,但是 changeborder(path1)function changeborder(path3073) 对我来说似乎很奇怪。此外,您在 JS 中的 style 属性中有一些空格。

标签: javascript dom svg tags


【解决方案1】:

onclick="changeborder(path1)"

没有 path1 这样的东西,所以这是一个语法错误。如果你把这个改成

onclick="changeborder('path1')"

然后您的代码将运行。您还有另一个问题,即 set 属性调用中的 stroke-dasharray CSS 属性中存在不需要的空格,应该删除但即使没有修复,如果您更改 onclick,您会看到单击形状会导致更改颜色。

【讨论】:

  • +1 此外,您可以将this 作为参数移交,以引用触发事件的实际元素。然后使用带有arguments[0].setAttribute 的参数应该可以正常工作。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-11-06
  • 2017-06-09
  • 2014-04-22
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多