随笔-121  评论-1530  文章-1  trackbacks-99

jQuery实例:图片展示效果

开始之前,我就喜欢先看一下效果:


张娜拉,韩国的
My Digital Story
不知道是什么图来的
我的Logo,Studio拼错了都不知道,汗一个。
四季图吧这是,但我分不清夏和秋













http://www.lanrentuku.com/lanren/jscode/js-0115/
上面的链接是群上一位兄弟发的一个图片展示效果,并叹息道:jQuery什么时候才有这么cool的例子啊?

我想说jQuery写这样的例子不难吧,于是就尝试着写一下.

先看Html:

HTML 代码

然后我们写一个CSS来控制一下这个HTML的样式,CSS比较菜,将就吧,达到效果就好:

CSS

完成上面的准备工作后,我们下面开始jQuery代码。
首先就是做一些初始化的工作:

$(document).ready(function(){
	var imgDivs = $("#photoShow>div");
	var imgNums = imgDivs.length; //图片数量
	var divWidth = parseInt($("#photoShow").css("width")); //显示宽度
	var imgWidth = parseInt($(".photo>img").css("width")); //图片宽度
	var minWidth = (divWidth - imgWidth)/(imgNums-1); //显示其中一张图片时其他图片的显示宽度
	var spanHeight = parseInt($("#photoShow>.photo:first>span").css("height")); //图片介绍信息的高度
	imgDivs.each(function(i){
		$(imgDivs[i]).css({"z-index": i, "left": i*(divWidth/imgNums)});
		$(imgDivs[i]).hover(function(){
			//处理鼠标进入的时候
		},function(){
			//处理鼠标离开的时候
		});
	});
});
首先我们定义了一些变量,方便我们后面使用。
然后就是使用了一个 each() 的函数在每一个匹配的元素进行事件处理。这里是每一个<div class="photo"> 元素分别进行事件的处理。
然后看一下下面这一句:
$(imgDivs[i]).css({"z-index": i, "left": i*(divWidth/imgNums), "top":"0px"});
这句是通过CSS来控制每一个图片的层次和显示位置。
然后就是用一个 hover() 函数来处理鼠标的hover事件。
首先看一下鼠标进入图片的时候该怎么处理:
$(imgDivs[i]).hover(function(){
	//$(this).find("img").css("opacity","1");
	$(this).find("span").stop().animate({bottom: 0}, "slow");
	imgDivs.each(function(j){
		if(j<=i){
			$(imgDivs[j]).stop().animate({left: j*minWidth}, "slow");
		}else{
			$(imgDivs[j]).stop().animate({left: (j-1)*minWidth+imgWidth}, "slow");
		}
	});
},function(){
	//处理鼠标离开时候的事件
});
在这里所有的动画效果都是通过 animate() 函数修改CSS来控制元素的显示位置来实现的。
这里注意一下就是在调用 animate() 函数前都调用了 stop() 函数。stop() 函数是用来停止当前元素的所有执行中的事件。
j<=i 的判断就是判断鼠标hover的当前图片和该图片前面的图片该图片后面的图片的分割线。
鼠标离开的处理也差不多,下面之完整的代码:
$(document).ready(function(){
	var imgDivs = $("#photoShow>div");
	var imgNums = imgDivs.length; //图片数量
	var divWidth = parseInt($("#photoShow").css("width")); //显示宽度
	var imgWidth = parseInt($(".photo>img").css("width")); //图片宽度
	var minWidth = (divWidth - imgWidth)/(imgNums-1); //显示其中一张图片时其他图片的显示宽度
	var spanHeight = parseInt($("#photoShow>.photo:first>span").css("height")); //图片介绍信息的高度
	imgDivs.each(function(i){
		$(imgDivs[i]).css({"z-index": i, "left": i*(divWidth/imgNums)});
		$(imgDivs[i]).hover(function(){
			//$(this).find("img").css("opacity","1");
			$(this).find("span").stop().animate({bottom: 0}, "slow");
			imgDivs.each(function(j){
				if(j<=i){
					$(imgDivs[j]).stop().animate({left: j*minWidth}, "slow");
				}else{
					$(imgDivs[j]).stop().animate({left: (j-1)*minWidth+imgWidth}, "slow");
				}
			});
		},function(){
			imgDivs.each(function(k){
				//$(this).find("img").css("opacity","0.7");
				$(this).find("span").stop().animate({bottom: -spanHeight}, "slow");
				$(imgDivs[k]).stop().animate({left: k*(divWidth/imgNums)}, "slow");
			});
		});
	});
});
 
本人水平一般,代码还有待改善。
自己觉得吧用JS来写这种效果不大实际,因为占用的CPU比较高,还是用Flash实现的好。偶写这个完全是为了学习.
或者哪位大大用silverlight也写个这样的效果的教程给偶学习下silverlight。
作者:QLeelulu Follow QLeelulu on Twitter
出处:http://QLeelulu.cnblogs.com/
本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,否则保留追究法律责任的权利
标签: jQuery
posted on 2008-04-01 17:25 Q.Lee.lulu 阅读(53304) 评论(62) 编辑 收藏

评论:
#1楼 2008-04-01 17:44 | jillzhang      
非常cool
 回复 引用 查看   
#2楼 2008-04-01 17:56 | 生鱼片      

 回复 引用 查看   
#3楼 2008-04-01 18:00 | 杨正祎(阿一)      
靠~效果超帅呀~~
 回复 引用 查看   
#4楼 2008-04-01 18:02 | 杨正祎(阿一)      
感觉缺点是—— 没有什么提示来告诉用户,那些图片是可以展开的。如果不知道的朋友可以以为就是一张图片呢。
 回复 引用 查看   
#5楼 2008-04-01 18:04 | jillzhang      
喜欢第二章图片
 回复 引用 查看   
#6楼 2008-04-01 18:18 | 支持[未注册用户]
很帅很强大
 回复 引用   
#7楼 2008-04-01 18:21 | ijzyi[未注册用户]
非常厉害的,可以赶上flash的效果了
 回复 引用   
#8楼[楼主] 2008-04-01 18:25 | Q.Lee.lulu      
@jillzhang
@生鱼片
:)

 回复 引用 查看   
#9楼[楼主] 2008-04-01 18:27 | Q.Lee.lulu      
@杨正祎(阿一)
WEB标准还得好好跟你学习呢
PS: 不知道兄弟普通话学得咋样了....

 回复 引用 查看   
#10楼 2008-04-01 18:34 | Shawphy[未注册用户]
$("#photoShow").mouseout(function(){
imgDivs.each(function(k){
$(this).find("span").stop().animate({bottom: -spanHeight}, "slow");
$(imgDivs[k]).stop().animate({left: k*(divWidth/imgNums)}, "slow");
});
});
这个可以搬出来,不必用来hover后面。

我始终觉得
if(j<=i){
$(imgDivs[j]).stop().animate({left: j*minWidth}, "slow");
}else{
$(imgDivs[j]).stop().animate({left: (j-1)*minWidth+imgWidth}, "slow");
}

可以用slice代替,但又始终想不出什么办法来……

 回复 引用   
#11楼 2008-04-01 19:17 | Zhuang miao      
不错不错。。
 回复 引用 查看   
#12楼 2008-04-01 19:35 | 秋千      
向楼主学习
 回复 引用 查看   
#13楼 2008-04-01 21:24 | 佚名人士[未注册用户]
--引用--------------------------------------------------
杨正祎(阿一): 感觉缺点是—— 没有什么提示来告诉用户,那些图片是可以展开的。如果不知道的朋友可以以为就是一张图片呢。
--------------------------------------------------------

我就以为是静止的....只是感觉那个图片好看....

 回复 引用   
#14楼 2008-04-01 21:32 | airwolf2026      
哇靠...那么帅啊啊啊...要是把老婆的照片这样展示,老婆一定高兴死了...
 回复 引用 查看   
#15楼 2008-04-01 21:35 | 乌生鱼汤      
1. 图片好看
2. 运动复杂的美

 回复 引用 查看   
#16楼 2008-04-01 21:56 | 留恋星空      
好漂亮喔
 回复 引用 查看   
#17楼 2008-04-01 22:27 | 菌哥      
啊呀,美不胜收啊!
 回复 引用 查看   
#18楼 2008-04-01 22:57 | Think Tips      
鼠标没有划过的时候,一次轮流展示就不会有人以为是一张图了~~
 回复 引用 查看   
#19楼 2008-04-02 00:55 | Yannic Yang      
JS都能这么强~hoho
非常cool
不过这种代码维护起来应该不简单

 回复 引用 查看   
#20楼 2008-04-02 08:28 | 专研.NET      
楼主的博客很帅呀
 回复 引用 查看   
#21楼 2008-04-02 08:35 | Solog      
cool~~~
 回复 引用 查看   
#22楼 2008-04-02 09:18 | 阿滨       
不错很漂亮
 回复 引用 查看   
#23楼 2008-04-02 09:26 | 李华顺      
感觉上不是很流畅
 回复 引用 查看   
#24楼 2008-04-02 09:39 | Beginor      
感觉代码有些冗余, 如果能够整理成一个类就更好了.
 回复 引用 查看   
#25楼 2008-04-02 10:10 | BookSir Genius      
哈哈,我也正想写一个类似的,但并不是这样的

不过博主厉害,哈哈

 回复 引用 查看   
#26楼 2008-04-02 10:48 | 路人小刀[未注册用户]
--引用--------------------------------------------------
airwolf2026: 哇靠...那么帅啊啊啊...要是把老婆的照片这样展示,老婆一定高兴死了...
--------------------------------------------------------
用silverlight尝试下

 回复 引用   
#27楼 2008-04-02 12:17 | Klesh Wong      
代碼寫得很漂亮,有美感
 回复 引用 查看   
#28楼 2008-04-02 12:28 | Vincent Love      
图片很漂亮

效果也很不错的说

 回复 引用 查看   
#29楼 2008-04-02 13:53 | 堕落的卖猪贩      
好好,好强大,不过确实用FLASH来实现,好的多。
 回复 引用 查看   
#30楼 2008-04-02 15:45 | 萧佰刚      
不错 呀
 回复 引用 查看   
#31楼 2008-04-02 23:40 | silverty      
不错!
 回复 引用 查看   
#32楼 2008-04-03 11:50 | 赵俊      
这个好像很和谐啊!
 回复 引用 查看   
#33楼 2008-04-03 13:07 | JKJ[未注册用户]
牛逼!
 回复 引用   
#34楼 2008-04-30 15:40 | cloudgamer      
缺了滑行效果
 回复 引用 查看   
#35楼 2008-05-05 10:05 | wwwlll[未注册用户]
将源码拷出来运行后,stop()报错
 回复 引用   
#37楼 2008-07-25 09:02 | ef[未注册用户]
是你写的吗?我怎么看到过类似的啊
 回复 引用   
#38楼 2008-07-29 01:33 | 周生生[未注册用户]
你好你的代码配置完了显示不出来是为啥呀不好用呢?能给说明一下吗
 回复 引用   
#39楼 2008-07-29 10:56 | tianzi[未注册用户]
别删了.我收藏
 回复 引用   
#40楼 2008-07-29 15:49 | Memory[未注册用户]
好像不支持stop()这个函数
请问博主用的是Jquery哪个版本?

 回复 引用   
#41楼 2008-10-15 17:12 | makey2003[未注册用户]
最近才开始学习jquery,属于菜鸟中的菜鸟,能不能把你的这个例子打包发给我看一下,学习学习~~~谢谢~~~
 回复 引用   
#42楼 2009-01-05 16:09 | yaolifeng[未注册用户]
能把它换成上下显示的吗
 回复 引用   
#43楼 2009-01-08 15:09 | mengfei[未注册用户]
我是新人,不会用呀!能说的详细点吗?谢谢
 回复 引用   
#44楼 2009-01-24 14:31 | dreamnan[未注册用户]
向楼主致敬, jQuery不需要像flash/silverlight要安装插件,还是不错的。

赞一个!

 回复 引用   
#45楼 2009-02-13 16:11 | 优雅的猪      
标记 收藏
 回复 引用 查看   
#46楼 2009-02-13 19:19 | 钟健[未注册用户]
请问有没有这个翻页的啊,有上一张,下一张的.谢谢!
 回复 引用   
#47楼 2009-02-16 15:28 | 午夜吹风喃      
楼主,可以添加一个左右切换按钮不啊?
 回复 引用 查看   
#48楼 2009-03-16 21:54 | 未成月人      
用了不错,不过你那个HTML中似乎最后多了个</div>
 回复 引用 查看   
#49楼 2009-03-21 22:01 | stg609      
js真得好酷呀~~~~
 回复 引用 查看   
#50楼 2009-06-06 00:05 | Jinspet      
有个问题请教,用slideDown效果时,在FF中效果很好,但是在IE中不是很好。
$("#pics").dblclick(function(){
$("<div class='backDiv'>Don't click me again!</div>").insertAfter($("#Form1")).slideDown(2000).animate({top:0},5000).fadeOut(400,function(){
$(this).remove();
});

慢慢的显示一个层,这个层的样式是整个浏览器窗口大小,z-index最大,在FF中慢慢从上滑下,效果很平稳,在IE中大概滑下到一半时就会“顿”一下,然后就没动画效果的显示完整了。博主有空了看看这个问题,问了几个朋友都没解决。多谢!

 回复 引用 查看   
#51楼[楼主] 2009-06-06 11:17 | Q.Lee.lulu      
@Jinspet
这个我也遇到过,我也没有解决,呵呵
兄弟找到解决方法了告诉我一声,哈

 回复 引用 查看   
#52楼 2009-08-24 20:29 | 鹤冲天      
Cool!一定要学习jQuery
 回复 引用 查看   
#53楼 2009-09-23 16:21 | 匿名网友[未注册用户]
@Jinspet
看看文档中加了下面的声明了吗?可以试试。
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">

 回复 引用   
#54楼 2010-06-03 15:28 | 一醉而过      
引用Jinspet:有个问题请教,用slideDown效果时,在FF中效果很好,但是在IE中不是很好。
<br/>$("#pics").dblclick(function(){
<br/>$("<div class='backDiv'>Don't click me again!</div>").insertAfter($("#Form1")).slideDown(2000).animate({top:0},5000).fadeOut(400,function(){
<br/>$(this).remove();
<br/>});
<br/>
<br/>慢慢的显示一个层,这个层的样式是整个浏览器窗口大小,z-index最大,在FF中慢慢从上滑下,效果很平稳,在IE中大概滑下到一半时就会“顿”一下,然后就没动画效果的显示完整了。博主有空了看看这个问题,问了几个朋友都没解决。多谢!


这个貌似是ie的一个BUG~
我前几天遇到过
需要测试下~

 回复 引用 查看   
#55楼 2011-03-31 15:27 | Jacob Song      
牛X啊
 回复 引用 查看   
#56楼 2011-04-16 17:03 | 126万[未注册用户]
不错的代码,谢谢分享!
 回复 引用   
#57楼 2011-04-22 16:21 | sunny-yang      
您好,我手上由一个jqury写的图片切换效果,可是我想添加一个鼠标放上去停止切换,不知道您可不可以帮这个忙,谢谢!
…………QQ:178771896

 回复 引用 查看   
#58楼 2011-04-22 16:27 | sunny-yang      
楼主,你可不可一在这基础上加上一个自动播放的效果啊,然后鼠标放上去就停止播放
 回复 引用 查看   
#59楼 2011-05-24 16:07 | 张小凡      
不错不错...挺喜欢这效果..
 回复 引用 查看   
#60楼 2011-10-14 16:23 | 不及格本科生      
这个用silverlight实现很简单
 回复 引用 查看   
#61楼 2011-12-07 11:39 | 黑*马      
mark,效果很不错哦
 回复 引用 查看   
发表评论

昵称: [登录] [注册]

主页:

邮箱:(仅博主可见)

评论内容:

  登录  注册

[使用Ctrl+Enter键快速提交评论]

0 1133112 w63JMMgWqMY=
昵称: lulu
网名: QLeelulu
大学: GDUT
城市: 广州=>珠海
职业: 打字员
CO. : PowerEasy => KingSoft
Mail: QLeelulu@163(gmail).com

Who Am I ?


Follow QLeelulu on Twitter
交流群 ASP.NET MVC交流群:
QQ群:1215279(满)
2群:1214648(满)
3群:47788243
(加的时候请注明)



昵称:Q.Lee.lulu
园龄:4年3个月
荣誉:推荐博客
粉丝:318
关注:7
<2008年4月>
303112345
6789101112
13141516171819
20212223242526
27282930123
45678910

搜索

 

常用链接

我的标签

随笔分类

随笔档案

.NET 资源

PowerEasy

我的好友

积分与排名

  • 积分 - 734316
  • 排名 - 65

最新评论

阅读排行榜

评论排行榜

推荐排行榜