Chinaunix首页 | 论坛 | 博客
  • 博客访问: 4268618
  • 博文数量: 776
  • 博客积分: 13014
  • 博客等级: 上将
  • 技术积分: 10391
  • 用 户 组: 普通用户
  • 注册时间: 2010-02-22 17:00
文章分类

全部博文(776)

文章存档

2015年(55)

2014年(43)

2013年(147)

2012年(20)

2011年(82)

2010年(429)

分类: C/C++

2012-09-26 18:56:48

developerworks/cn/xml/x-svgint/

SVG 中的交互性可以分为三个领域 -- 链接、事件和脚本。本文将依次讨论这三个领域。

注意:要查看本技巧中的 SVG 文档,需要有一个 SVG 查看程序,可以在 参考资料中找到这种查看程序(还有一个包括所有相关文件的 .zip 文件)。

链接

最基本的交互形式是链接。在 SVG 中,通过一个  标签提供链接,这与 HTML 链接的方式几乎相同。将  标签与一个xlink:href 属性结合使用便可以建立一个链接。在   标签之间的所有内容都作为链接的一部分。清单1展示了一个例子,它有三个元素,设置为链接到三个不同的 URL。 单击这里以在浏览器中查看它们。

文本、矩形和多边形元素都有到不同页面的链接,这表明所有 SVG 元素 -- 不管是文本、圆还是不规则的多边形 -- 都可以作为一个链接。注意,如果将鼠标移动到这些元素上面,指针会相应地发生改变,表明这是一个链接。

其功能与 HTML 中的 image map(或者 hotspot)基本上相同。不过,在 HMTL 中这会是一个很麻烦的过程,要用专门的软件在一个图像上手工绘制热点 -- 如果这个图像或者链接改变了,那么更新它们会非常麻烦。在 SVG 中,定义和维护链接则容易得多,这主要是因为链接可以随着 SVG 内容动态移动。


清单1. 链接

Click here Or here Or even here


注意在多边形的 xlink 中使用的 target=new 属性。它指示查看程序在单击这个元素时打开一个新的浏览器窗口

事件

SVG 支持鼠标单击、鼠标移动和鼠标按下这样的用户鼠标事件。清单2展示了一个例子:


清单2. 使用鼠标的交互性

Move over me and click


单击这里以便观看效果。矩形和文本元素对不同的事件 -- 如移动鼠标和单击 -- 做出反应,产生一种简单的滚动效果。试着将鼠标移动到元素上面以观看这些效果。任何可以应用到元素上的 SVG 属性 -- 如填充颜色、笔划宽度、大小和透明度 -- 都可以以这种方式改变。

文字元素可以对两种事件做出反应 -- mouseover  mousedown 。这表明可以对同一个元素指定多个事件。SVG 支持许多不同的事件 -- 有关所有事件类型的完整列表可以参看 参考资料中的 W3C 的 SVG 站点。

如果希望一个元素上的事件可以引发对另一个元素的操作,可以对 SVG 元素指定 id 属性,然后引用它们。清单3展示了一个例子。


清单3: 改变另一个元素的属性

Move over for red text Move over for big text Click me for big red text Change me


单击这里可以在浏览器中观看效果。当鼠标移动到不同的矩形上时,文本就会改变。有三个矩形被指定了各自的 id 属性,文字的 set元素通过“ id.eventName ”引用这些属性。触发矩形的事件时,文本的属性就会相应地改变。

还可以用一个动画响应事件。清单4展示了这样的一个例子:


清单4. 开始一个动画


单击这里以便观看效果。单击矩形时,它会淡出,在圆形上面移动鼠标时,它的颜色会改变。注意可以在 begin 属性中使用“ +Xs ”使动画延迟开始。

键按下

虽然 SVG 上的大部分交互是通过鼠标进行的,但是 SVG 也支持键盘输入。这是通过事件处理程序 accessKey 实现的,如清单5所示。


清单5. 捕获键按下


单击这里以观看效果。三个矩形设置为响应键盘上的数字键 1、2 和 3。试一试按下每一个键,并观察图像相应的反应。

可以设置一个元素响应任意数量的不同的键。注意第三个矩形设置为监听两个键按下。第三个矩形上的第二个 accessKey 处理程序设置为监听键 ( ) -- 您可能认出它就是回车键(Enter)的标准 HTML 编码。要指定任何特殊字符或者空格字符,必须使用 &#XX 这样的 HTML 编码格式,其中 XX 是 ASCII 字符编码。

脚本

到目前为止我只讨论了用 SVG 支持的内置功能响应事件的基本方法。虽然可以只使用这些功能完成很多工作,但是要实现更高级的效果就需要使用脚本了。SVG 支持像 VBScript 和 JavaScript 这样的脚本语言,对于这里的例子,我将使用 JavaScript。

要让一个 SVG 对象对脚本中的事件作出响应,要在触发器名上加前缀 on ,这样 click 就变为 onclick  mouseover 就变为onmouseover ,等等。清单6展示了一个 SVG 脚本的例子。

阅读(3895) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~