使用jQuery的极简幻灯片库

在今天的教程中,我们将创建一个简单而美观的幻灯片画廊,可以很容易地集成到您的网站。缩略图网格将从顶部滑出,并允许用户浏览一组缩略图。

在今天的教程中,我们将创建一个简单而美观的幻灯片画廊,可以很容易地集成到您的网站。这个想法是有一个容器与我们的幻灯片和选项来查看缩略图的网格,暂停幻灯片,并浏览图片。缩略图网格将从顶部滑出,并允许用户浏览一组缩略图。

所以,我们开始吧!

使用jQuery的极简幻灯片库

标记

主HTML结构将包含主幻灯片包装,其中包含全视图图像(msg_wrapper)的容器和缩略图(msg_thumbs)的容器:

<div id="msg_slideshow" class="msg_slideshow">
<div id="msg_wrapper" class="msg_wrapper"></div>
<div id="msg_controls" class="msg_controls">
<a href="#" id="msg_grid" class="msg_grid"></a>
<a href="#" id="msg_prev" class="msg_prev"></a>
<a href="#" id="msg_pause_play" class="msg_pause"></a>
<a href="#" id="msg_next" class="msg_next"></a>
</div>
<div id="msg_thumbs" class="msg_thumbs">
<div class="msg_thumb_wrapper">
<a href="#">
<img src="images/thumbs/1.jpg" alt="images/1.jpg"/>
</a>
<a href="#">
<img src="images/thumbs/2.jpg" alt="images/2.jpg"/>
</a>
<a href="#">
<img src="images/thumbs/3.jpg" alt="images/3.jpg"/>
</a>
<a href="#">
<img src="images/thumbs/4.jpg" alt="images/4.jpg"/>
</a>
<a href="#">
<img src="images/thumbs/5.jpg" alt="images/5.jpg"/>
</a>
<a href="#">
<img src="images/thumbs/6.jpg" alt="images/6.jpg"/>
</a>
</div>
<div class="msg_thumb_wrapper" style="display:none;">
<a href="#">
<img src="images/thumbs/1.jpg" alt="images/7.jpg"/>
</a>
<a href="#">
<img src="images/thumbs/2.jpg" alt="images/8.jpg"/>
</a>
<a href="#">
<img src="images/thumbs/3.jpg" alt="images/9.jpg"/>
</a>
<a href="#">
<img src="images/thumbs/4.jpg" alt="images/10.jpg"/>
</a>
<a href="#">
<img src="images/thumbs/5.jpg" alt="images/11.jpg"/>
</a>
<a href="#">
<img src="images/thumbs/6.jpg" alt="images/12.jpg"/>
</a>
</div>
<a href="#" id="msg_thumb_next" class="msg_thumb_next"></a>
<a href="#" id="msg_thumb_prev" class="msg_thumb_prev"></a>
<a href="#" id="msg_thumb_close" class="msg_thumb_close"></a>
<span class="msg_loading"></span>
</div></div>

缩略图的alt属性将包含完整视图图像的路径。

类名得到前缀“味精”,这样的风格不会干扰你网站上的其他任何东西。

所以,让我们来看看风格。

CSS

首先,我们将定义主包装的样式:

.msg_slideshow{	width:400px;	height:400px;	padding:10px;	position:relative;	overflow:hidden;	background:#101010 url(../icons/loading.gif) no-repeat center center;	-moz-border-radius:10px;	-webkit-border-radius:10px;	border-radius:10px;}

通过设置加载GIF为背景图片,我们正在执行一个小技巧:当我们正在等待下一张图片显示时,我们的包装将是空的,并显示加载程序。当下一个图像被加载时,它将简单地隐藏加载器。

我们将从链接元素中删除边框和轮廓:

.msg_slideshow a{	outline:none;}.msg_slideshow a img{	border:none;}

为了将整个图像放在容器中,纵向和横向,我们需要添加另一个包装。该包装将显示为表格单元格。添加vertical-align:middle属性将使图像居中。

.msg_wrapper{	width:400px;	height:400px;	position:relative;	margin:0;	padding:0;	display:table-cell;	text-align:center;	vertical-align:middle;	overflow:hidden;}.msg_wrapper img{	display: inline-block!important;	vertical-align:middle;	-moz-box-shadow:0px 0px 10px #000;	-webkit-box-shadow:0px 0px 10px #000;	box-shadow:0px 0px 10px #000;}

图像样式中的显示属性将确保我们的图像不会成为display:block,因为我们将在我们的jQuery函数中使用fadeIn。由于我们想要保持图像水平居中,所以我们需要保持为内联(-block)元素。

控制元素将具有以下样式:

.msg_controls{	position:absolute;	bottom:15px;	right:-110px;	width:104px;	height:26px;	z-index: 20;	-moz-border-radius:5px;	-webkit-border-radius:5px;	border-radius:5px;	background-color:#000;	opacity:0.8;}

所有控制元素的共同风格如下:

.msg_controls a{	float:left;	background-color:#000;	width:20px;	height:20px;	margin:3px 3px;	opacity:0.5;	background-repeat:no-repeat;	background-position: center center;}.msg_controls a:hover{	opacity:1.0;}

每个图标的样式:

.msg_controls a.msg_grid{	background-image:url(../icons/grid.png);}.msg_controls a.msg_prev{	background-image:url(../icons/prev.png);}.msg_controls a.msg_next{	background-image:url(../icons/next.png);}.msg_controls a.msg_pause{	background-image:url(../icons/pause.png);}.msg_controls a.msg_play{	background-image:url(../icons/play.png);}

拇指容器将从顶部滑入,所以我们将它放置在绝对位置,并通过将顶部设置为-230px来隐藏它:

.msg_thumbs{	background:#000;	position:absolute;	width:250px;	height:166px;	top:-230px;	left:50%;	padding:30px;	margin:0 0 0 -155px;	-moz-border-radius:0px 0px 10px 10px;	-webkit-border-bottom-left-radius:10px;	-webkit-border-bottom-right-radius:10px;	border-bottom-left-radius:10px;	border-bottom-right-radius:10px;	-moz-box-shadow:1px 1px 5px #000;	-webkit-box-shadow:1px 1px 5px #000;	box-shadow:1px 1px 5px #000;	opacity:0.9;	overflow:hidden;}

剩下的50%和左边缘的宽度减去一半的宽度,我们可以将绝对的元素水平放置在水平方向上。

包含缩略图的包装器将具有以下样式:

.msg_thumb_wrapper{	position:absolute;	width:250px;	height:166px;	top:30px;	left:30px;	z-index:30;}

缩略图的样式如下:

.msg_thumb_wrapper a{	display:block;	width:75px;	height:75px;	float:left;	margin:4px;	opacity:0.8;}

当我们悬停这个缩略图时,我们将设置不透明度为1.0,但是我们将在jQuery函数中进行动画效果的效果。

导航控件的样式:

.msg_thumbs a.msg_thumb_next,.msg_thumbs a.msg_thumb_prev{	width:18px;	height:20px;	background-repeat:no-repeat;	background-position: center center;	position:absolute;	top:50%;	margin-top:-10px;	opacity:0.5;}.msg_thumbs a.msg_thumb_next:hover,.msg_thumbs a.msg_thumb_prev:hover{	opacity:1.0;}.msg_thumbs a.msg_thumb_next{	background-image:url(../icons/next_thumb.png);	right:5px;}.msg_thumbs a.msg_thumb_prev{	background-image:url(../icons/prev_thumb.png);	left:5px;}

返回网格视图的小元素:

.msg_thumbs a.msg_thumb_close{	position:absolute;	bottom:0px;	width:50px;	left:50%;	margin:0 0 0 -25px;	background:#202020 url(../icons/up.png) no-repeat center center;	height:16px;	opacity:0.7;	-moz-border-radius:5px 5px 0 0;	-webkit-border-top-left-radius:5px;	-webkit-border-top-right-radius:5px;	border-top-left-radius:5px;	border-top-right-radius:5px;}

我们在右上角和左上角添加一些边框半径。当我们盘旋时,我们会使它不透明:

.msg_thumbs a.msg_thumb_close:hover{	opacity:1.0;}

最后是网格视图的加载元素,我们将其水平和垂直放置在50%的方法中:

.msg_loading{	position:absolute;	background:transparent url(../icons/loading.gif) no-repeat center center;	top:50%;	left:50%;	width:50px;	height:50px;	margin:-25px 0 0 -25px;	z-index:25;	display:none;}

这就是所有的风格。现在,让我们添加一些魔法!

JavaScript

首先,我们将定义一些变量:

  • interval: 显示图像之间的时间

  • playtime: setInterval函数的超时

  • current: 数字控制当前图像

  • current_thumb: 当前的拇指包的索引

  • nmb_thumb_wrappers: 总数量的缩略图

  • nmb_images_wrapper: 每个包装内的图像的数量

var interval			= 4000;var playtime;var current 			= 0;var current_thumb 		= 0;var nmb_thumb_wrappers	= $('#msg_thumbs .msg_thumb_wrapper').length;var nmb_images_wrapper = 6;

我们开始幻灯片:

play();

当我们将鼠标悬停在主容器上时,我们将使控件从右侧滑出:

slideshowMouseEvent();function slideshowMouseEvent(){
$('#msg_slideshow').unbind('mouseenter')
.bind('mouseenter',showControls)
.andSelf()
.unbind('mouseleave')
.bind('mouseleave',hideControls);
}

当我们点击控件中的网格图标时,我们将显示缩略图视图,暂停幻灯片,并隐藏控件:

$('#msg_grid').bind('click',function(e){
hideControls();
$('#msg_slideshow').unbind('mouseenter').unbind('mouseleave');
pause();
$('#msg_thumbs').stop().animate({'top':'0px'},500);
e.preventDefault();
});

点击图标以隐藏缩略图视图将再次显示控件:

$('#msg_thumb_close').bind('click',function(e){
showControls();
slideshowMouseEvent();
$('#msg_thumbs').stop().animate({'top':'-230px'},500);
e.preventDefault();
});

接下来,我们定义单击暂停或播放时会发生什么。除了更改类之外,我们还将调用pause()或play()函数:

$('#msg_pause_play').bind('click',function(e){	var $this = $(this);	if($this.hasClass('msg_play'))
play();	else
pause();
e.preventDefault();
});

点击“下一步”或“之前”控制将暂停我们的幻灯片并显示各自的图像:

$('#msg_next').bind('click',function(e){
pause();
next();
e.preventDefault();
});
$('#msg_prev').bind('click',function(e){
pause();
prev();
e.preventDefault();
});

接下来,我们定义显示和隐藏控件的函数。通过设置正确的值,我们将使其滑动。记住,我们在CSS中设置了一个初始负值。

function showControls(){
$('#msg_controls').stop().animate({'right':'15px'},500);
}function hideControls(){
$('#msg_controls').stop().animate({'right':'-110px'},500);
}

play()函数,使幻灯片的播放:

function play(){
next();
$('#msg_pause_play').addClass('msg_pause').removeClass('msg_play');
playtime = setInterval(next,interval)
}

使用幻灯片的功能。我们再次更改类并清除超时:

function pause(){
$('#msg_pause_play').addClass('msg_play').removeClass('msg_pause');
clearTimeout(playtime);
}

接下来的两个函数将显示下一个或之前的图像:

function next(){
++current;
showImage('r');
}function prev(){
--current;
showImage('l');
}

下一个函数是显示图像。我们还可以呼叫交流(alternateThumbs)(),它们将总是改变网格以显示当前图像所在的视图。

function showImage(dir){	/**
* the thumbs wrapper being shown, is always
* the one containing the current image
*/
alternateThumbs();	
/**
* the thumb that will be displayed in full mode
*/
var $thumb = $('#msg_thumbs .msg_thumb_wrapper:nth-child('+current_thumb+')')
.find('a:nth-child('+ parseInt(current - nmb_images_wrapper*(current_thumb -1)) +')')
.find('img');	if($thumb.length){		var source = $thumb.attr('alt');		var $currentImage = $('#msg_wrapper').find('img');		if($currentImage.length){
$currentImage.fadeOut(function(){
$(this).remove();
$('<img />').load(function(){					var $image = $(this);
resize($image);
$image.hide();
$('#msg_wrapper').empty().append($image.fadeIn());
}).attr('src',source);
});
}		else{
$('<img />').load(function(){					var $image = $(this);
resize($image);
$image.hide();
$('#msg_wrapper').empty().append($image.fadeIn());
}).attr('src',source);
}
}	else{ //this is actually not necessary since we have a circular slideshow
if(dir == 'r')
--current;		else if(dir == 'l')
++current;	
alternateThumbs();		return;
}
}

显示的是始终包含当前图像的一个。因此,我们定义了一个控制这个的函数:

function alternateThumbs(){
$('#msg_thumbs').find('.msg_thumb_wrapper:nth-child('+current_thumb+')')
.hide();
current_thumb = Math.ceil(current/nmb_images_wrapper);	/**
* if we reach the end, start from the beggining
*/
if(current_thumb > nmb_thumb_wrappers){
current_thumb 	= 1;
current 		= 1;
}	/**
* if we are at the beggining, go to the end
*/
else if(current_thumb == 0){
current_thumb 	= nmb_thumb_wrappers;
current 		= current_thumb*nmb_images_wrapper;
}
$('#msg_thumbs').find('.msg_thumb_wrapper:nth-child('+current_thumb+')')
.show();
}

接下来,我们定义了当我们通过拇指导航时发生的情况:

$('#msg_thumb_next').bind('click',function(e){
next_thumb();
e.preventDefault();
});
$('#msg_thumb_prev').bind('click',function(e){
prev_thumb();
e.preventDefault();
});function next_thumb(){	var $next_wrapper = $('#msg_thumbs').find('.msg_thumb_wrapper:nth-child('+parseInt(current_thumb+1)+')');	if($next_wrapper.length){
$('#msg_thumbs').find('.msg_thumb_wrapper:nth-child('+current_thumb+')')
.fadeOut(function(){
++current_thumb;
$next_wrapper.fadeIn();
});
}
}function prev_thumb(){	var $prev_wrapper = $('#msg_thumbs').find('.msg_thumb_wrapper:nth-child('+parseInt(current_thumb-1)+')');	if($prev_wrapper.length){
$('#msg_thumbs').find('.msg_thumb_wrapper:nth-child('+current_thumb+')')
.fadeOut(function(){
--current_thumb;
$prev_wrapper.fadeIn();
});
}
}

点击缩略图将载入各自的图像:

$('#msg_thumbs .msg_thumb_wrapper > a').bind('click',function(e){	var $this 		= $(this);
$('#msg_thumb_close').trigger('click');	var idx			= $this.index();	var p_idx		= $this.parent().index();
current			= parseInt(p_idx*nmb_images_wrapper + idx + 1);
showImage();
e.preventDefault();
}).bind('mouseenter',function(){	var $this 		= $(this);
$this.stop().animate({'opacity':1});
}).bind('mouseleave',function(){	var $this 		= $(this);
$this.stop().animate({'opacity':0.5});
});

最后,我们的调整大小与容器内的图像相匹配,我们定义为400400像素:

function resize($image){	var theImage 	= new Image();
theImage.src 	= $image.attr("src");	var imgwidth 	= theImage.width;	var imgheight 	= theImage.height;	var containerwidth = 400;	var containerheight = 400;	if(imgwidth	> containerwidth){		var newwidth = containerwidth;		var ratio = imgwidth / containerwidth;		var newheight = imgheight / ratio;		if(newheight > containerheight){			var newnewheight = containerheight;			var newratio = newheight/containerheight;			var newnewwidth =newwidth/newratio;
theImage.width = newnewwidth;
theImage.height= newnewheight;
}		else{
theImage.width = newwidth;
theImage.height= newheight;
}
}	else if(imgheight > containerheight){		var newheight = containerheight;		var ratio = imgheight / containerheight;		var newwidth = imgwidth / ratio;		if(newwidth > containerwidth){			var newnewwidth = containerwidth;			var newratio = newwidth/containerwidth;			var newnewheight =newheight/newratio;
theImage.height = newnewheight;
theImage.width= newnewwidth;
}		else{
theImage.width = newwidth;
theImage.height= newheight;
}
}	$image.css({		'width'	:theImage.width,		'height':theImage.height
});
}

这是它!我们希望您喜欢本教程,并发现我们的幻灯片非常有用!

免责声明:本站所有文章内容,图片,视频等均是来源于用户投稿和互联网及文摘转载整编而成,不代表本站观点,不承担相关法律责任。其著作权各归其原作者或其出版社所有。如发现本站有涉嫌抄袭侵权/违法违规的内容,侵犯到您的权益,请在线联系站长,一经查实,本站将立刻删除。 本文来自网络,若有侵权,请联系删除,如若转载,请注明出处:https://itzsg.com/10028.html

(0)
上一篇 2023年 4月 22日 下午11:55
下一篇 2023年 4月 22日 下午11:55

相关推荐

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

联系我们YX

mu99908888

在线咨询: 微信交谈

邮件:itzsgw@126.com

工作时间:时刻准备着!

关注微信