|
这是一个幻灯片播放程序,也就是一图片轮流播放的程序。我们在一些站点上可以看见这种形式的广告播放条,大多是用CGI做的,也就是要服务器端支持CGI程序,如ASP、PHP、Perl等。但我们这里的实现方法无需CGI,用的仅是CSS的效果,再加上javascripts的控制。只要你的浏览器是IE 4.0以上或是Netscape 3.0以上的就可以了。只不过在这里我们用到了CSS的Filter滤镜效果,该效果只能在IE中出现。有关CSS的Filter滤镜效果,大家可以参看我的《CSS中Filter滤镜详解》,该文章在Yesky.com上已经发表。 好了,让我们来做点准备工作吧。
首先,为了制作这个效果,我们首先要打几个尺寸一样大小的图片,让其轮流播放。比如,我找了下面三个88x31的图片做为所用的的图片。
其次,让我们再来复习一下CSS中Filter的图片转换滤镜的知识:
CSS中的显示转换滤镜
显示转换滤镜提供的是一种更为多变的转换效果,它不像混合转换滤镜,只提供一种淡入淡出的效果,它还提供了更多的图片转换效果,它的语法是:
Filter : RevealTrans ( duration = 转换的秒数,transition=转换类型 )
大家可以看见,它有一个转换类型的参数,这里,它提供了24种转换类型,我们只需指定转换类型的代号,就可以让图片按特有的转换效果进行转换。下表就是24种转换滤镜的形式及其对应的代号:
| 显示转换滤镜的转换形式 |
所对应的代号 |
显示转换滤镜的转换形式 |
所对应的代号 |
| 矩形从大至小 |
0 |
随机溶解 |
12 |
| 矩形从小至大 |
1 |
垂直向内裂开 |
13 |
| 圆形从大至小 |
2 |
垂直向外裂开 |
14 |
| 圆形从小至大 |
3 |
水平向内裂开 |
15 |
| 向上推开 |
4 |
水平向外裂开 |
16 |
| 向下推开 |
5 |
向左下剥开 |
17 |
| 向右推开 |
6 |
向左上剥开 |
18 |
| 向左推开 |
7 |
向右下剥开 |
19 |
| 垂直形百叶窗 |
8 |
向右上剥开 |
20 |
| 水平形百叶窗 |
9 |
随机水平细纹 |
21 |
| 水平棋盘 |
10 |
随机垂直细纹 |
22 |
| 垂直棋盘 |
11 |
随机选取一种特效 |
23 |
动态转换滤镜的属性、方法和事件 属性名 说明 取值 duration 图像转换的延迟时间,最小单位是毫秒,也就是小数点后第三位。 单位是秒,取值自然数 enabled 指定是否应用滤镜效果 0表示不应用,非0表示就用。 staus 传回一个转换状态 0表示转换停止 1表示显示应用的转换滤镜 2表示正在转换中 方法名 说明 Apply 将滤镜应用到对象上 Play 开始转换 Stop 停止转换 事件名 说明 OnFilterChange 当滤镜转变发生改变或是滤镜完成时所触发的事件
上面的CSS的转换滤镜如何被javascripts调用的知识我没有过多的说明,我只是列举了他的属性方法和事件。在后面,我们用javascript来控制他的时候,我会告诉大家如何用javascripts使其工作的。当然这些滤镜只能在IE4.0中浏览,NetScape不支持,不过,这并不影响netscape中的显示,只不过Netscape中不会出现图片转换的效果了。
下面,我要开始最为核心的部分了,就是编写javascript程序了。我们的思路是,可以定义一组图片(若干张),当页面出现时先显示第一张图片,并预载入第二张图片,第一张图片载入后5秒钟,如果第二张图片也载入了,我们就开始自动切换到第二张图片,此时并预载入第三张图片,如果5秒钟内我们载入了第三张图片,就自动切换到第三张图片,如此播放下去直到最后一张又从头开始。当然,这是自动播放的了。我们还允许用户手动进行向前和向后的播放。
首先,我们要解决的问题是图片的预载入,因为这决定了切换过程的流畅性和播放过程的完美性。要预载入一幅图片很简单,我们只要在内存中新建一个图片的实例变量,并把该变量指向一幅图片,这样,我们的浏览器便会自动载入这幅图片的,这就是图片的预载入。用javascript写出来就是下面这个样子:
var myImage = new Image() myImage.src = "someImage.gif"
然后,我们还要知道,图片是否载入了吗?如果载入了,我们就显示,如果没载入,那么就要出错了。于是我们还要改一下上面的代码,在其中加入两条语句,所以,这段javascript就变成下面的样子了:
var img = new Image() img.onload = doReadyImage img.onerror = doErrorDisplay img.src = "someImage.gif"
我们加入了图片的onload和onerror事件,分别代表是否预载和预载出错的事件。这两条句语必需在img.src语句的前面。否则的话,图片预载就会出错。
最后就是我们的图片切换程序了,在前面,我们复习了CSS中Filter转换滤镜的各种效果,这里我们用代号为23的随机效果,下面,是我们为在IE中这种效果所写的javascript程序:
if (document.images.slideShow.filters) { document.images.slideShow.filters[0].Stop() document.images.slideShow.filters[0].Apply() // 使用随机的转换效果 document.images.slideShow.filters.revealTrans.transition=23 }
document.images.slideShow.src = sSource // 开始进行转换效果的执行 if (document.images.slideShow.filters) document.images.slideShow.filters[0].Play()
|