手风琴方式展现的图片展示效果

手风琴方式展现的图片展示效果:
图片展示效果多种多样,例如最为流行的滚动方式,不过这个大家已经司空监管了,不会感到有什么新奇的,本章节分享一段类似于手风琴式图片展现效果,并且还有分类功能,希望能够给需要的朋友带来一定的帮助。
代码实例如下:

<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<meta name="author" content="http://www.softwhy.com/" />
<title>蚂蚁部落</title>
<style type="text/css">
* 
{
  margin:0px;
  padding:0px;
}
ul{list-style:none}
div.stu_style 
{
  border-radius:5px;
  box-shadow:0px 1px 2px 1px #a9d6d8;
  background:#fff;
  margin:10px;
  padding:10px;
  width:920px;
}
div.stu_style div.inner_exp 
{
  height:140px;
  width:919px;
  overflow:hidden;
  position:relative;
}
div.stu_style div.one_exp 
{[/size]
[size=2]  top:10px;
  position:absolute;
  z-index:1;
  height:140px;
  width:857px;
}
div.stu_style div.one_exp span 
{
  display:block;
  float:left;
  width:16px;
  height:103px;
  font-size:14px;
  color:#ffe094;
  font-weight:bold;
  background:#fda000;
  padding:37px 7px 0 7px;
  cursor:pointer
}
div.stu_style div.one_exp span.on 
{
  background:#ffc946;
  color:#ffffff
}
div.stu_style div.exp_2 
{
  left:31px;
  z-index:2;
}
div.stu_style div.exp_3 
{
  left:62px;
  z-index:3;
}
div.stu_style div.one_exp ul 
{
  width:817px;
  height:140px;
  float:left;
  background:#ececec;
  padding-left:10px;
}
div.stu_style div.one_exp ul li 
{
  width:144px;
  height:94px;
  float:left;
  display:inline;
  padding:3px;
  background:#fff;
  box-shadow:0px 0px 2px #999;
  margin:20px 0 0 10px;
}
div.stu_style div.one_exp ul li img 
{
  width:144px;
  height:94px;
  border:0px;
}
</style>
<script type="text/javascript" src="mytest/jQuery/jquery-1.8.3.js"></script>
<script type="text/javascript">
$(document).ready(function(){
  var acCordion=function(){
    var _wrap=$(".stu_style");
    var _oneExp=_wrap.find(".one_exp");
    var _aniWidth=_oneExp.find("ul").width()+10;
    var _num=_oneExp.length;
    _oneExp.find(" span").click(function(){
      if($(this).hasClass("on"))
      {
        return false;
      }   
      var _inx=$(this).parent(".one_exp").index();
      for(var i=0;i<=_inx;i++)
      {
        _oneExp.eq(i).animate({"left":(30*i+1*i)+"px"},500)
      }
      for(var i=_inx+1;i<_num;i++)
      {
        _oneExp.eq(i).animate({"left":(30*i+_aniWidth+i*1)+"px"},500)
      }
      $(this).addClass("on").parent().siblings().find("span").removeClass("on");
    })
  }() 
})
</script>
</head>
<body>
<div class="stu_style">
  <div class="inner_exp">
    <div class="one_exp"> <span>欧美风光</span>
      <ul>
        <li><a href="#"><img src="mytest/demo/2.jpg" alt="" /></a></li>
        <li><a href="#"><img src="mytest/demo/3.jpg" alt="" /></a></li>
        <li><a href="#"><img src="mytest/demo/4.jpg" alt="" /></a></li>
        <li><a href="#"><img src="mytest/demo/5.jpg" alt="" /></a></li>
        <li><a href="#"><img src="mytest/demo/6.jpg" alt="" /></a></li>
      </ul>
    </div>
    <div class="one_exp exp_2"> <span>绝美自然</span>
      <ul>
        <li><a href="#"><img src="mytest/demo/2.jpg" alt="" /></a></li>
        <li><a href="#"><img src="mytest/demo/3.jpg" alt="" /></a></li>
        <li><a href="#"><img src="mytest/demo/4.jpg" alt="" /></a></li>
        <li><a href="#"><img src="mytest/demo/5.jpg" alt="" /></a></li>
        <li><a href="#"><img src="mytest/demo/6.jpg" alt="" /></a></li>
      </ul>
    </div>
    <div class="one_exp exp_3"> <span class="on">心怡荒野</span>
      <ul>
        <li><a href="#"><img src="mytest/demo/2.jpg" alt="" /></a></li>
        <li><a href="#"><img src="mytest/demo/3.jpg" alt="" /></a></li>
        <li><a href="#"><img src="mytest/demo/4.jpg" alt="" /></a></li>
        <li><a href="#"><img src="mytest/demo/5.jpg" alt="" /></a></li>
        <li><a href="#"><img src="mytest/demo/6.jpg" alt="" /></a></li>
      </ul>
    </div>
  </div>
</div>
</body>
</html>

 以上代码实现了我们的要求,下面介绍一下此特效的实现过程。

首先简单介绍一下CSS是如何控制布局的,在默认情况下,只会在特效的右侧才会显示图片,而左侧则是显示分类标题,也就是说只会显示一个div中的图片,其他的图片之所以没显示,是因为放置图片的三个div块是采用的绝对定位,而左侧的两个div的z-index值要小,所以被遮挡了,并且通过调整left属性值使相应的div只显示标题部分即可,具体不多说了,思路大致如此。
一.js代码注释:
1.$(document).ready(function(){}),当稳当结构完全加载完毕再去执行函数中的代码。
2.var acCordion=function(){}(),声明并执行一个函数。
3.var _wrap=$(".stu_style"),获取class属性值为stu_style的对象。
4.var _oneExp=_wrap.find(".one_exp"),获取上面获取的对象下,class属性值为one_exp的对象。
5.var _aniWidth=_oneExp.find("ul").width()+10,这里之所以添加10,是为了是图片左右两端的灰色区域宽度相等,由于li元素的10px左边内边距和ul的10px左右内边距会造成图片左边的灰色区域是20px,右边只是10px,所以要10。
6.var _num=_oneExp.length,获取存放图片的div块的数目。
7._oneExp.find(" span").click(function(){}),为标题注册click事件处理函数。
8.if($(this).hasClass("on")){return false;},判断当前点击的span元素是否具有名称为on的class属性,也就是判断当前图片栏目是否完全处于展示状态,如果处于展开状态,则跳出函数。
9.var _inx=$(this).parent(".one_exp").index(),获取当前被点击标题(span元素)的class属性值为one_exp的父元素的索引值。
10.for(var i=0;i<=_inx;i++),通过遍历设置相应放置图片的div的left属性值,它的功能是让索引值小于等于当前被点击标题所在div索引的div向左移动,也就是满足展现当前被点击标题所在div的第一个条件。
11._oneExp.eq(i).animate({"left": (30*i+1*i)+"px"},500),通过动画方式设置,值的大小是根据span标题的宽度和为了设置两个相邻的标题之间间隔1px而确定的。
12.for(var i=_inx+1;i<_num;i++),如果说上面的注释9满足了第一个条件,那么这个就满足了第二个条件,也就是设置所以值大于当前被点击标题所在div索引的div的left属性值,也就是让满足这些条件的div向右移动。
13._oneExp.eq(i).animate({"left": (30*i+_aniWidth+i*1)+"px"},500),原理和上面是一样。
14.$(this).addClass("on").parent().siblings().find("span").removeClass("on"),为当前点击的标题(span)添加class属性on,并且移除其他span的属性值为on的class。
二.相关阅读:
1.find()函数可以参阅jQuery的find()方法一章节。
2.width()函数可以参阅jQuery的width()方法一章节。 
3.click事件可以参阅jQuery的click事件一章节。 
4.hasClass()函数可以参阅jQuery的hasClass()方法一章节。 
5.parent()函数可以参阅jQuery的parent()方法一章节。 
6.index()函数可以参阅jQuery的index()方法一章节。 
7.eq()函数可以参阅jQuery的eq()方法一章节。 
8.animate()函数可以参阅jQuery的animate()方法一章节。 
9.addClass()函数可以参阅jQuery的addClass()方法一章节。 
10.siblings()函数可以参阅jQuery的siblings()方法一章节。 
11.removeClass()函数可以参阅jQuery的removeClass()方法一章节。 

原文地址是:http://www.softwhy.com/forum.php?mod=viewthread&tid=10904

更多内容可以参阅:http://www.softwhy.com/jquery/

猜你喜欢

转载自softwhy.iteye.com/blog/2269326
今日推荐