图片轮播效果(二)

制作时间:15:30 - 18:00

抛弃之前测试用的三个方框,正式制作漂亮的界面。测试环境只是用Chrome,所以浏览器兼容性还没有考虑到。

html代码:

<div id="lunbo">
    <ul id="pic_list">
        <li class="pos_0"><img src="./images/8.jpg"></li>
        <li class="pos_1"><img src="./images/1.jpg"></li>
        <li class="pos_2"><img src="./images/2.jpg"></li>
        <li class="pos_3"><img src="./images/3.jpg"></li>
        <li class="pos_4"><img src="./images/4.jpg"></li>
        <li class="pos_5"><img src="./images/5.jpg"></li>
        <li class="pos_6"><img src="./images/6.jpg"></li>
        <li class="pos_6"><img src="./images/7.jpg"></li>
    </ul>

    <a href="javascript:;" class="btn prev">
        <span class="icon"></span>
    </a>

    <a href="javascript:;" class="btn next">
        <span class="icon"></span>
    </a>
</div>

最终要实现的页面是这样的:


Paste_Image.png

为这几张图片添加红色标注,便于理解。根据规律,第3张图的两边其实是对称的,大小啊,透明度啊,层级关系啊都是一样的。

那我来一步一步添加css代码。

首先添加基本的 css 代码:

@charset "UTF-8";
body,h1,h2,h3,p,ul,img,a {margin:0;padding:0;}
body{background:#FFFFFF url(../images/hxd_bg.gif) repeat-x;}
ul{ list-style: none; }
a{ text-decoration:none; }
img{ border: none; }

#lunbo{
    width:970px;
    height: 344px;
    margin: 98px auto 0;
    position: relative;
}
#lunbo ul{ width: 970px; height: 344px;position:absolute;left:0;top:0; }

接下来的每一步是:

  1. 修改图片透明度
#lunbo .pos_0 img, #lunbo .pos_6 img{ opacity: 0; }
#lunbo .pos_1 img, #lunbo .pos_5 img{ opacity: 0.6; }
#lunbo .pos_2 img, #lunbo .pos_4 img{ opacity: 0.8; }

2.图片位置和层级设置

#lunbo ul li{ position: absolute; }
#lunbo ul .pos_0 { left:0; top: -104px; z-index: 1; }
#lunbo ul .pos_6 { right:0; top: -104px; z-index: 1; }
#lunbo ul .pos_1 { left:0; top:92px; z-index:2; }
#lunbo ul .pos_5 { right:0; top:92px; z-index:2; }
#lunbo ul .pos_2 { left:48px; top:40px; z-index:3; }
#lunbo ul .pos_4 { right:48px; top:40px; z-index:3; }
#lunbo ul .pos_3 { left:140px; top:0; z-index:4; }

3.图片大小和宽度设置

#lunbo .pos_3 img {width:680px;}
#lunbo .pos_2 img, #lunbo .pos_4 img {width:510px;}
#lunbo .pos_1 img, #lunbo .pos_5 img, #lunbo .pos_6 img {width:270px;}
#lunbo .pos_0 img {width:100px;}

4.向前向后按钮

#lunbo a.btn {width:120px;height:110px;position:absolute;z-index:5;cursor:pointer;}
#lunbo a.prev{left:72px;top:108px;}
#lunbo a.next{right:81px;top:108px;}
#lunbo a.btn span{width:76px;height:110px;position:absolute;}
#lunbo a.prev .icon{left:0;top:0;background:url(../images/hxd_btn_1.png) no-repeat left top;}
#lunbo a.next .icon{right:0;top:0;background:url(../images/hxd_btn_1.png) no-repeat left bottom;}

css代码结束

js开始

过程:获取元素的对象 -> 数组切换 -> 元素属性重新赋值。
跟第一版不同的地方:
1. 更改的属性变多了。
2. 因为向前和向后按钮实现的功能差不多,所以可以调用同一个函数,只是参数不同。

代码如下:

var $oDiv = $("#lunbo");
    var $oUl = $("ul");
    var $aLi = $("li");
    var $aLnk = $("ul a");
    var $aImg = $("img");
    var $oPrevBtn = $("a.prev");
    var $oNextBtn = $("a.next");
    var $oPrevIcon = $(".prev.icon");
    var $oNextIcon = $(".next.icon");

    var arr = [];

    for(var i=0; i < $aLi.length; i++){
        var $inow = $aLi.eq(i);
        var iPos = $inow.position();
        var iLeft = iPos.left;
        var iTop = iPos.top;
        var iZindex = $inow.css("z-index");
        var iOpacity = $aImg.eq(i).css("opacity")*100;
        var iWidth = parseInt($aImg.eq(i).css("width"));
        arr.push([iPos, iLeft, iTop, iZindex, iOpacity, iWidth]);

    }

    $oPrevBtn.click(function(){
        imgSwitch(true);
    });

    $oNextBtn.click(function(){
        imgSwitch(false);
    });

    function imgSwitch(isPrev){
        if(isPrev){
            arr.push(arr.shift());
        }else{
            arr.unshift(arr.pop());
        }

        for(var i=0; i < $aLi.length; i++){
            var $inow = $aLi.eq(i);
            $inow.css("z-index",arr[i][3]);
            $inow.animate( { "left":arr[i][1], "top":arr[i][2] } );
            $aImg.eq(i).animate({"opacity":arr[i][4]/100,"width":arr[i][5]});
        }
    }
})

注意:animate对opacity属性作动画,值的范围得是0-100,所以 css("opacity") 通过取值后要 *100。最后赋值的时候再 / 100即可。

其实还可以添加一些效果,比如可以设定成自动轮播的,鼠标移到图上时暂停自动轮播等其他你能想得到的效果。那今天这个效果就做到这里了。

不积跬步无以至千里

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 203,098评论 5 476
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 85,213评论 2 380
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 149,960评论 0 336
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,519评论 1 273
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,512评论 5 364
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,533评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 37,914评论 3 395
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,574评论 0 256
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,804评论 1 296
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,563评论 2 319
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,644评论 1 329
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,350评论 4 318
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 38,933评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,908评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,146评论 1 259
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 42,847评论 2 349
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,361评论 2 342

推荐阅读更多精彩内容