2011-05-02 79 views
12

我看到<script>标签可以在svg标签中使用(ref)。此外,svg标签内的元素可以通过标签外的JavaScript访问,因为它们是DOM的一部分。我找不到更好的细节。通常,我将所有JS代码保存在单独的文件中,并将引用包含在html中。我是否也可以使用针对svg元素的脚本。另外,我读了我也可以给svg标签内的一个外部JS文件的链接。SVG <script>元素:内部还是外部?

要更清楚一点,说我有一个网页(html5)嵌入svg标签在其中。 svg包含几个基本形状,我需要鼠标交互。我可能会使用jQuery,但不能使用其他外部插件。你会建议将所有的JavaScript(用于svg以外的元素)保存在一个单独的文件中,还是将svg部分分开。也可以使用jQuery引用svg标签中的元素吗?我做任何低效

回答

8

当您的脚本适合SVG本身时,在SVG内部放置一个<script>元素(无论您是使用内联代码还是通过xlink:href在另一个文件中引用)都是正确的,可以放置或不放置其他上下文。例如,如果您只有a scripted SVG document,这是必要的。

例如,假设您有一个HTML页面,并且包含两个SVG文件。

  • 第一个SVG文件有一些通过JavaScript创建的自定义动画。这个SVG文件应该直接拥有自己的脚本元素。

  • 第二个SVG文件只是一个奇特的图像,并且当您单击该图像时,您希望在HTML页面上提交一个表单。为此,该脚本应该在您的HTML页面中,因为它会同时与SVG和HTML表单进行对话。这是一个similar example,HTML中的按钮用于控制SVG。

当你是inlining your SVG content in something XHTML5而不是引用外部SVG文件时,该行变得模糊。 SVG内容是它自己的野兽,还是它与特定段落文本一样是HTML页面的一部分?

我个人倾向于将我的SVG内联到HTML中,从而将我的所有脚本保留在SVG之外。不过,要么会奏效。

+0

情景和思考过程的细分。很好的例子(虽然圆圈动画引起我的血压)! – peteorpeter 2011-05-03 16:39:35

6

您可以使用属性调用外部文件。

<svg xmlns:xlink="http://www.w3.org/1999/xlink" xmlns="http://www.w3.org/2000/svg"> 
    <script type="text/ecmascript" xlink:href="script.es"/> 
</svg> 

(来源:W3C

另外,我建议你RaphaelJS,一个JavaScript库,允许跨浏览器的矢量绘图。

+0

谢谢..我的问题是关于将你的JS分离目标到SVG,还是与其他JS目标HTML元素结合和链接..还有,我需要任何特殊的照顾,同时解决SVG标签中的元素或任何类似jQuery的库都可以在svg中操作元素。我也看到了http://keith-wood.name/svg.html,但现在试图使用最小的依赖关系。 – bsr 2011-05-02 21:39:52

+0

我个人更喜欢将脚本与布局分离,并使用单独的文件。与通常的HTML DOM一样,您可以使用** geElementById **和** getElementsByTagName **。 – 2011-05-05 05:07:34