在svg

时间:2015-05-07 20:46:01

标签: svg scripting

所以魔鬼在这个问题的细节中。

我想创建一些带有封装行为的svg组件(因此我想在外部svg文件中包含一个脚本标记)。现在,当你包含via object或embed等时,这可以从HTML5中正常工作。但是我想从svg标签中引用这些svg文件(在svg元素中)。

因此,从svg中,我知道包含svg文件(通过xlink:href)的唯一方法是使用图像标记或使用标记。但是,它们都不会在其内容模型中接受脚本标记,我假设是脚本标记未被解释的原因(并且我非常确定它们没有被解释)。我正在svgs中转发CData格式的脚本,所以我不认为这是一个解析问题。

这是我的意思的简短例子。

Html文件:

<!DOCTYPE html>
<html>
  <head>
    <meta charset="UTF-8"/>
  </head>
  <body>
    <div id"top">
      <svg id="map" viewBox = "0 0 500 500" version = "1.1" width="250" height="250"
       xmlns="http://www.w3.org/2000/svg"
       xmlns:xlink="http://www.w3.org/1999/xlink">
        <image x="0" y="110" width="100" height="100" xlink:href="svg/obj/example.svg" />
      </svg>
    </div>
  </body>
</html>

和svg / obj / example.svg:

<?xml version="1.0" encoding="iso-8859-1"?>
<svg viewBox = "0 0 500 500" version = "1.1" width="250" height="250"
 xmlns="http://www.w3.org/2000/svg"
 xmlns:xlink="http://www.w3.org/1999/xlink">

  <script type="application/ecmascript"> <![CDATA[
    function circle_click(evt) {
      var circle = evt.target;
      var currentRadius = circle.getAttribute("r");
      if (currentRadius == 100)
        circle.setAttribute("r", currentRadius*2);
      else
        circle.setAttribute("r", currentRadius*0.5);
    }
  ]]> </script>

  <circle cx="200" cy="200" r="100" fill="yellow" stroke="black" stroke-width="3" onclick="circle_click(evt)" onactivate="circle_click(evt)" mouseover="circle_click()"/>

</svg>

为了消除解析错误的可能性,我从W3C示例(iir)剪切并粘贴上述脚本。我已经尝试过很多关于这个主题的变体,但似乎无法让它发挥作用。具体内容充分混淆,搜索只会带来不同的用例。希望有人可以带我摆脱痛苦;)。

0 个答案:

没有答案