好了,让我们来做点准备工作吧。
首先,为了制作这个效果,我们首先要打几个尺寸一样大小的图片,让其轮流播放。比如,我找了下面三个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()