仿照常见的那个图片变换flash做的效果,纯js。不过滤镜变换只对应ie,ff只能看到一般的切换。这个js做的效果最早在sina看到,这里把这个效果封装好方便使用。
效果:
程序说明:
图片未开始转换时,由于没有图片会显示一个红x,所以隐藏图片:
this._img.style.visibility = "hidden";
ps:以前我用this._img.src = "javascript:void(0);";但这个在ie8会出错。
这个变换效果需要滤镜,所以只支持ie。要使用变换滤镜,要先设置filter:
this._img.style.filter = "revealTrans()"
变换之前先设置两个参数Transition和Duration,分别是变换效果和持续时间,其中Duration是浮点数。
此外还有两个属性Enabled和Percent分别是是否激活滤镜和当前静态滤镜输出在转换进程中所处的点。
设置完后还需要运行apply和play方法,分别是应用变换效果和运行效果:
with(this._img.filters.revealTrans){
Transition = this.Transition; Duration = this.Duration; apply(); play();
}
除了这两个方法还有一个stop方法用来停止效果。
下面列出所有效果和对应Transition值(参考手册):
值 : 效果
0 : 矩形收缩转换。
1 : 矩形扩张转换。
2 : 圆形收缩转换。
3 : 圆形扩张转换。
4 : 向上擦除。
5 : 向下擦除。
6 : 向右擦除。
7 : 向左擦除。
8 : 纵向百叶窗转换。
9 : 横向百叶窗转换。
10 : 国际象棋棋盘横向转换。
11 : 国际象棋棋盘纵向转换。
12 : 随机杂点干扰转换。
13 : 左右关门效果转换。
14 : 左右开门效果转换。
15 : 上下关门效果转换。
16 : 上下开门效果转换。
17 : 从右上角到左下角的锯齿边覆盖效果转换。
18 : 从右下角到左上角的锯齿边覆盖效果转换。
19 : 从左上角到右下角的锯齿边覆盖效果转换。
20 : 从左下角到右上角的锯齿边覆盖效果转换。
21 : 随机横线条转换。
22 : 随机竖线条转换。
23 : 随机使用上面可能的值转换。
其中23比较特别,是随机效果,程序默认就是随机效果。
设置完滤镜效果后就修改图片的src就开始转换了。
然后设置链接:
!!list["url"] ? (this._a.href = list["url"]) : this._a.removeAttribute("href");
要注意的是这里用removeAttribute去掉a的href才能去掉链接,如果只设为空那么链接还是去不掉的。
使用说明:
首先要实例化一个对象:
var rvt = new RevealTrans("idPicShow");
idPicShow就是显示变换的容器对象。
有以下这些可选参数和属性:
属性:默认值//说明
Auto: true,//是否自动切换
Pause: 1000,//停顿时间(微妙)
Duration: 1,//变换持续时间(秒)
Transition: 23,//变换效果(23为随机)
List: [],//数据集合,如果这里不设置可以用Add方法添加
onShow: function(){}//变换时执行
其中List是数据集合,其中每个元素结构是这样的:
{ img: 图片url, text: 相关文本, url: 相关链接 }
在使用时要注意,也可以在实例化之后用Add方法添加:
rvt.Add('http://images.cnblogs.com/cnblogs_com/cloudgamer/143727/r_rt_1.jpg', '图片变换效果', 'http://www.cnblogs.com/cloudgamer/archive/2008/05/23/1205642.html');
可以一个一个添加,这样方便后台用循环输出数据。
至于图片列表、按钮和文本显示区域是自己扩展的部分,详细请看实例。
全部设置完成后就可以用Start开始变换程序了:
rvt.Start();
程序代码:

Code
var RevealTrans = Class.create();
RevealTrans.prototype = {
initialize: function(container, options) {
this._img = document.createElement("img");
this._a = document.createElement("a");
this._timer = null;//计时器
this.Index = 0;//显示索引
this._onIndex = -1;//当前索引
this.SetOptions(options);
this.Auto = !!this.options.Auto;
this.Pause = Math.abs(this.options.Pause);
this.Duration = Math.abs(this.options.Duration);
this.Transition = parseInt(this.options.Transition);
this.List = this.options.List;
this.onShow = this.options.onShow;
//初始化显示区域
this._img.style.visibility = "hidden";//第一次变换时不显示红x图
this._img.style.width = this._img.style.height = "100%"; this._img.style.border = 0;
this._img.onmouseover = Bind(this, this.Stop);
this._img.onmouseout = Bind(this, this.Start);
isIE && (this._img.style.filter = "revealTrans()");
this._a.target = "_blank";
$(container).appendChild(this._a).appendChild(this._img);
},
//设置默认属性
SetOptions: function(options) {
this.options = {//默认值
Auto: true,//是否自动切换
Pause: 1000,//停顿时间(微妙)
Duration: 1,//变换持续时间(秒)
Transition: 23,//变换效果(23为随机)
List: [],//数据集合,如果这里不设置可以用Add方法添加
onShow: function(){}//变换时执行
};
Extend(this.options, options || {});
},
Start: function() {
clearTimeout(this._timer);
//如果没有数据就返回
if(!this.List.length) return;
//修正Index
if(this.Index < 0 || this.Index >= this.List.length){ this.Index = 0; }
//如果当前索引不是显示索引就设置显示
if(this._onIndex != this.Index){ this._onIndex = this.Index; this.Show(this.List[this.Index]); }
//如果要自动切换
if(this.Auto){
this._timer = setTimeout(Bind(this, function(){ this.Index++; this.Start(); }), this.Duration * 1000 + this.Pause);
}
},
//显示
Show: function(list) {
if(isIE){
//设置变换参数
with(this._img.filters.revealTrans){
Transition = this.Transition; Duration = this.Duration; apply(); play();
}
}
this._img.style.visibility = "";
//设置图片属性
this._img.src = list.img; this._img.alt = list.text;
//设置链接
!!list["url"] ? (this._a.href = list["url"]) : this._a.removeAttribute("href");
//附加函数
this.onShow();
},
//添加变换对象
Add: function(sIimg, sText, sUrl) {
this.List.push({ img: sIimg, text: sText, url: sUrl });
},
//停止
Stop: function() {
clearTimeout(this._timer);
}
};
下载完整程序
ps:由于有些绿色版ie6会把滤镜功能去掉,所以用这类ie6会看不到效果的,用正宗版本就可以正常浏览了。
其他图片展示效果:
JavaScript 图片滑动展示效果
JavaScript 图片切换展示效果
Tag标签:
JavaScript,
图片,
切换,
变换,
Duration,
filter,
特效,
滤镜,
transition,
revealTrans,
幻灯片
posted @ 2008-05-23 12:02
cloudgamer 阅读(34920)
评论(118) 编辑 收藏 网摘 所属分类:
Javascript
发表评论
把你的代码贴到HTML里,图片很大啊。
能告诉我哪里该图片大小的吗
我开不太懂...
如果可以的话,请发到我邮箱:ljc4204@sina.com
麻烦了
#102楼[
楼主]2008-10-08 15:23 |
@ljc4204
你把样式改了试试先吧
#105楼[
楼主]2008-10-29 08:38 |
@久久乡情
谢谢建议
有空整理一下
#107楼[
楼主]2008-10-29 21:14 |
@xiongsy
一起学习
知道为啥小图片会变的和上面的show的一样大,因为直接粘贴复制到DW中,会自动加上一些不必要的代码
比如:#idPicList img {}{
cursor:pointer;
width:65px;
height:50px;
filter:alpha(opacity=50);
-moz-opacity: .5;
opacity: .5;
border:0;
margin:10px;
}
跟上面的一对照,就是img后面加了个“{}”,这个大括号应该去掉的。都没有注意到这点
#109楼[
楼主]2008-10-30 20:07 |
@liuliuliu
迟点整理一下
把源程序打个包就不会有问题了
#111楼[
楼主]2008-11-04 17:54 |
@tang-7
这个应该跟编码没关系吧
可能有些中文或符号转成乱码了
请检查一下
那为什么我在ie6里无法看到效果呢?我只能在firefox和ie7里看到效果啊~
#113楼[
楼主]2008-11-24 16:36 |
@super糖糖
我估计你是用了阉割版的ie6
你可以在其他机试试
您好,用到了你的程序。谢谢先。
不过我还有个请求,能不能把下面的滚动小图左右加上按钮呢?然后让小图无限滚动,而且还无限添加图片。小图不会长的超出上面大图的范围呢。
#116楼[
楼主]2008-12-08 14:27 |
@悟〈--觉
谢谢支持
@随意0029
这个或者你自己扩展一下吧
因为不是一下子能弄出来的
能发源文件给我吗^^^谢了,我的邮箱是593175909@qq.com
#118楼[
楼主]2008-12-09 10:20 |
@学习aaaaaaaaaaaaaaaaa
不是有个“下载完整程序”吗
#121楼[
楼主]2008-12-24 10:05 |
@southsiberia
@anony
谢谢支持
要去掉图片列表只要把相关的html和js去掉就行了
RevealTrans本身不需要修改
能发个全整的代码,我才学,很多地方不懂,能发能我吗???
我的邮箱是:
32720043@qq.com
#123楼[
楼主]2008-12-25 14:55 |
下面的小图列表怎么都删不掉,删掉了那些数字也没有了,大图也不动了!!!
下面的小图怎么改?
我是把
#idPicText{
background:#eee;
line-height:25px;
text-align:center;
font-weight:bold;
width:282px;
white-space:nowrap;
overflow:hidden;
font-size:12px;
}
#idPicText a{
text-decoration:none;
color:#333;
display:block;
}
#idPicList img{
cursor:pointer;
width:65px;
height:50px;
filter:alpha(opacity=50);
-moz-opacity: .5;
opacity: .5;
border:0;
margin:10px;
}
#idPicList img.on{
filter:alpha(opacity=100);
-moz-opacity: 1;
opacity: 1;
或者
<div id="idPicText"></div>
<div id="idPicList"></div>
或者
oText.innerHTML = !!list.url ? "<a href='" + list.url + "' target='_blank'>" + list.text + "</a>" : list.text;
}
//文本显示区域
oText.onmouseover = function(){ rvt.Auto = false; rvt.Stop(); };
oText.onmouseout = function(){ rvt.Auto = true; rvt.Start(); };
去掉,但是都不行啊!5555555555555
#125楼[
楼主]2008-12-26 15:24 |
@harry_2009
你吧
<div id="idPicList"></div>
和
//图片式
var img = document.createElement("img");
img.src = list["img"]; img.alt = list["text"];
arrImg[i] = img;
oList.appendChild(img);
和
//图片式
Each(arrImg, function(o){ o.className = ""; }); arrImg[i].className = "on";
去掉
事件设置改成
//事件设置
li.onmouseover = function(){ rvt.Auto = false; rvt.Index = i; rvt.Start(); };
li.onmouseout = function(){ rvt.Auto = true; rvt.Start(); };
就行了
那些字也去掉可以吗?要怎么改?
搂主搞个网站吧,我们都给你捧场
水平又很牛,态度又好,大家可以帮你搞火的,呵呵。
就像csdn或者很多门户网站上的
只要大图+Num,下面的介绍文字和下面的图列表不要
搂主写一个我们下载吧…………
#128楼[
楼主]2008-12-26 20:03 |
@harry_2009
你把
<div id="idPicText"></div>
和
//文本区域
oText.innerHTML = !!list.url ? "<a href='" + list.url + "' target='_blank'>" + list.text + "</a>" : list.text;
和
//文本显示区域
oText.onmouseover = function(){ rvt.Auto = false; rvt.Stop(); };
oText.onmouseout = function(){ rvt.Auto = true; rvt.Start(); };
去掉试试
#130楼[
楼主]2008-12-29 10:10 |
@harry_2009
谢谢支持!
我本来嫌代码学得枯燥又没人教想退出,今天看到楼主的博客,有信心了,非常感谢您!!!支持
补充上面
楼主做个网站吧,加上广告链接,我们帮你点击,这样你既可以给我们提供学习好资料,又可以增加点适当的收入做为你的小小津贴给你补补身子以便我们提供更好的学习资料,楼下同意的支持一下!!
#133楼[
楼主]2008-12-31 08:40 |
@很喜欢楼主
做网站是很花时间的,我自己以前也有两个站
不过实在没时间维护都关掉了
而且这里的平台已经很好了,谢谢支持
@harry_2009
你吧
<div id="idPicList"></div>
和
//图片式
var img = document.createElement("img");
img.src = list["img"]; img.alt = list["text"];
arrImg[i] = img;
oList.appendChild(img);
和
//图片式
Each(arrImg, function(o){ o.className = ""; }); arrImg[i].className = "on";
和事件设置改成
//事件设置
li.onmouseover = function(){ rvt.Auto = false; rvt.Index = i; rvt.Start(); };
li.onmouseout = function(){ rvt.Auto = true; rvt.Start(); };
就行了
这一改动好像没写完啊,只有“//事件设置”的改动方法,没有几种“//图片式”的改动啊!
#136楼[
楼主]2008-12-31 11:10 |
@皓月12345
//图片式
那些是去掉的
不好意思,没写清楚
向楼主求救了,我搞了两天实在搞不定,快吐血了,怎么把
//添加变换对象
rvt.Add('img/1.jpg', '外壳', 'http://www.cnblogs.com/cloudgamer/archive/2008/05/23/1205642.html');
rvt.Add('mg/2.jpg', '外壳', 'http://www.cnblogs.com/cloudgamer/archive/2008/05/13/1194272.html');
这里面的'img/1.jpg'路径改成我调用PHP数据库的路径,'外壳'的路径也是调用数据库的路径,而且在后台添加产品的时候下面的缩略图也会相应自动增加,
下面的是我以前做的图片也是调用数据库的你看一下
<?php if($result2[0]['pro_pic_s']==null||$result2[0]['pro_pic_s']=="") echo "暂无图片!"; else
if (substr($_GET['sort_id'],0,4)==1013)
{
echo " ";
}else
{?>
<img src="class/showimage.php?imagename=../uploadfile/product_s/<? echo $result2[0]['pro_pic_s']?>&imagewidth=320&imageheight=300&cuteit=0" border="0" />
<?php }?>
这个是调用数据库的产品列表目录代码
<td bgcolor="#FFFFFF"> <a href="products_main.php?p_id=<? echo $rs[$i]['s_id']?>&sort_id=<? echo $so_id?>" class="text"><? echo $rs[$i]['pro_name']?></a></td>
#138楼[
楼主]2008-12-31 16:15 |
@2188pyj
这里只要简单的循环输出而已啊
你问问懂php的人怎么循环输出吧
求求版主再好好整理一下,关布一个只有图片变换效果的页面代码,谢谢版主了。初学者8
麻烦版主能把整个图片变换的代码发到我的邮箱里吗?初学者不太会。一直想找这个效果没找到,今天终于见到了。呵呵。谢谢版主了。609323098@qq.com
#141楼[
楼主]2009-01-03 17:17 |
我想问下, 怎么样换图片,你的程序里面,只能网络地址来添加图片,如何用要地路径来添加图片,我是放在桌面的, 我是一个菜鸟,
你好~,我刚仔细看了下, 有个这个地方可以设置,但我不知道怎么设置
List: [],//数据集合,如果这里不设置可以用Add方法添加
如何才能用本地的图片呢, 设置的话,谢谢
#144楼[
楼主]2009-01-04 13:55 |
@我是one菜鸟
那就用本地物理路径咯
不过ie7可能不行不过这个跟程序无关
#146楼[
楼主]2009-01-04 15:15 |
@我是one菜鸟
你问问人吧
我都不知道你想要什么
你的程序,我下载了, 我想换几个图片,不知道怎么改, 而且一改成本地路径就铁定错了, 你说应该怎么改啊,大哥, 小弟菜,希望你把改好的发给我下, 谢谢了, 小弟QQ邮箱:710415279@qq.com
#148楼[
楼主]2009-01-04 15:38 |
@我是one菜鸟
你换成D:\My Documents\1.jpg这样的路径试试
不行的话我也不知道了
我改成了D:\My Documents\1.jpg这种格式,试了下,还是错了,可能要先发到网上去才能吧,我发现用网址的图片就可以换,但一用本地的就不行,这是怎么回事, 还请大哥帮帮,找找原因,
#150楼[
楼主]2009-01-05 10:31 |
@我是one菜鸟
这个我也解决不了
安全问题,不允许这样操作也很正常
#152楼[
楼主]2009-01-05 11:28 |
@我是one菜鸟
你可以找个能上传图片的地方上传(有很多的,例如163相册)
再拿地址
谢谢,我已经知道怎么样改图了,但是,那我每次改之前,那不得把图片先上传传到网上相册里面去,再用网址改,这样好麻烦哦, 有没有直接用本地地址的,有的话,麻烦你放上来,我下载过来, 呵呵,不过还是要谢谢大哥的指点,以后,我会常来的, 呵呵
#154楼[
楼主]2009-01-05 16:18 |
@我是one菜鸟
这个没有办法,是安全问题(不能随便就读本地文件的信息的)
除非叫微软改浏览器
楼主, 怎么样把这个图片切换的位置定下来呢?我放进一个表格里,但他第一张在右边, 变到第二张的时候就到了左边,这是怎么回事?
#156楼[
楼主]2009-01-06 14:47 |
@我是one菜鸟
请你参照我的实例吧
楼主,怎么样才能把图片上的那些数字以及样及去掉呢,我去掉之后发现图片却不在一个位置,每显示一张就会移动一下,我觉得应该是那些数字的一些样式没有去掉,但又不知道在哪里,请楼主指教一下。
#158楼[
楼主]2009-01-08 11:47 |
@阿喜
我已经添加了一个没有数字的实例
你重新下一次吧
楼主,我发现如果图片是GIF格式的,就不会有错,但是如果是JPG的,就会出现问题,这个怎么解决呢?
#161楼[
楼主]2009-01-08 14:02 |
@阿喜
实例中用的就是jpg
你自己检查一下吧
大哥,我又来了, 我把这个图片切换程序放进网页中,我想把他的位置放在第二行的右边,可是他只在左上方,怎么样才能调整他的位置。代码在哪个地方调整。谢谢
#163楼[
楼主]2009-01-13 16:37 |
@我是one菜鸟
这个不是 程序问题
你找个人帮你吧
楼主,我把这个代码插入到我的网页中,却发现会和网页冲突,每次图片一翻动的时候,页面下面就会被白色区域遮住,请问有什么办法可以解决。
#165楼[
楼主]2009-01-17 13:38 |
@coldgenius
你用下载的例子改吧
#167楼[
楼主]2009-01-20 20:03 |
@李俊
你把23改成2
缩略图是自己设置先看懂程序吧
楼主 我是初学 现在做毕业设计(网站) 已经做的差不多了 现在留有一小块地方想做图片切换的效果 可是为什么用你的代码放进去图片不显示(图片应该放在哪个文件夹啊)而且位置是斜的
#169楼[
楼主]2009-03-04 20:55 |
@祎晨
你下载实例对照参考一下吧
写的太好了,但我还是不太清楚怎么来用
楼主可以发一个额源码到我的邮箱:327842846@qq.com
#171楼[
楼主]2009-03-15 18:13 |
@hlpower
不是已经有下载完整程序的链接了么
不对啊,演示没问题,但下载的文件包,有上下两个大图!
#173楼[
楼主]2009-03-26 10:24 |
@老K
晕
那是两个不同的演示啊
楼主,请问一下。。。我只要那个有数字的。。还有不要下面的小图片怎么去掉啊。。。。急啊。。。
楼主急啊。。现在知道知道去下面的小图。。但我只要有数字的那个效果。。怎么去掉上面那个效果啊。。。。。楼主麻烦。。。。
楼主,我万事具备就欠你的东风了。。。。我急啊。。。谢谢了。。。。。
#178楼[
楼主]2009-03-27 13:52 |
@moko
谢谢支持
@xudong
你找个稍懂js的帮帮你吧
实在不想回答这种问题了
请问楼主,为什么我显示出来两个主图片,能不能去掉一个?谢谢
#180楼[
楼主]2009-04-22 21:58 |
@高宏颖
你去掉其中一个的代码不就行了
两个实例之间都没关系的
有一个问题请教博主。我要展示的图片尺寸不一,所以希望能够保持原大小。width 和 height 都用 auto 的话,图片会充满其所在的框架,所以就只指定了 width(虽然也不是原始尺寸),height 仍用 auto 。这样在 IE 里面看起来没问题了。但是在 Safari 里面,height 是 auto 的话就不会显示容器,指定固定尺寸的话图片又变形。不知楼主是否有办法在各种浏览器中显示图片原始大小?谢谢!
.container{
width:250px;
height:auto;
border:1px solid #CCCCCC;
position:relative;
}
#182楼[
楼主]2009-05-03 20:41 |
@SmartCat
Safari我也不了解,也没有用过,我也不清楚哦
@楼主
请问如果不用div来实现container而用表格的话,该如何定义呢?谢谢!
#184楼[
楼主]2009-05-04 08:27 |
@SmartCat
应该也是一样的吧
定义宽高
感谢楼主 但我不想要下面的三个小图片 怎么去掉 啊
#187楼[
楼主]2009-05-25 16:00 |
@感谢作者
谢谢支持
@dddcf
下载实例看看
博主,我按照 45 楼那样,怎么连下面的说明文字也去掉了,我想保留变化的图片和下面的文字,去掉下面的小图片。怎么弄呢?谢谢。
#189楼[
楼主]2009-05-28 23:25 |
@谢谢
先看懂程序再改吧
请问add函数,可以加多一个string类型的参数吗?
我想通过add函数来加入(图片,图片的标题,图片的描述,url)
我是这样的加入的:
加入idPicTextc的css
加入id为idPicTextc 的div
//添加变换对象
Add: function(sIimg, sTitle, sText, sUrl) {
this.List.push({ img: sIimg, text: sTitle, text: sText, url: sUrl });
},
实例化的时候
rvt.Add('images/pic.jpg', '风景...', '真美', 'http://www.picutre.cn/');
加入定义变量: cText = $("idPicTextc")
加入:
//文本区域
cText.innerHTML = !!list.url ? "<a href='" + list.url + "' target='_blank'>" + list.text + "</a>" : list.text;
//文本显示区域
cText.onmouseover = function(){ rvt.Auto = false; rvt.Stop(); };
cText.onmouseout = function(){ rvt.Auto = true; rvt.Start(); };
这样改了之后,发现id为idPicText的div和id为idPicTextc的div读出来的都是相片的描述,既是add函数的第三个参数--真美。有什么办法可以分开呢?谢谢先。
#192楼[
楼主]2009-05-29 21:41 |
@谢谢
你可以自己改一个属性名
不要都用text
只是改这里不行呢,还有改哪里呢?
//添加变换对象
Add: function(sIimg, sTitle, sText, sUrl) {
this.List.push({ img: sIimg, string: sTitle, text: sText, url: sUrl });
},
搞定了,谢谢博主提醒。。
cText.innerHTML = !!list.url ? "<a href='" + list.url + "' target='_blank'>" + list.text + "</a>" : list.text;
这里也要改。。。将里面的text改为string 。。。
请问类不能支持AutoMation是什么问题.在IE6下报的错误.谢谢
#196楼[
楼主]2009-06-01 11:38 |
@KK820
ie6应该没问题的
你可能用的不是正宗版本的ie6
#198楼[
楼主]2009-06-10 16:28 |
@yayascs
你按照代码的格式
后台输出就行了
博主,我想问下如果切换效果不设置自动,想对每张图片设置效果。该怎么做?
#201楼[
楼主]
2009-06-16 16:34 |
@秋红
程序没有这个功能
不过你可以参考
this.List.push({ img: sIimg, text: sText, url: sUrl });
把类似Transition的参数传进去用来自定义变换效果
具体你自己试试吧