jQuery 實現輪播圖實例

1。html+css+js代碼

<!DOCTYPE html>
<html>
<head>
    <title></title>
    <style type="text/css">
        *{
            margin: 0;
            padding: 0;
            text-decoration: none;
        }
        body{
            padding: 20px;
        }
        #container{
            min-width: 1000px;
            /*width: 1300px;*/
            height: 400px;
            overflow: hidden;
            position: relative;
            margin: 0 auto;
        }
        #list{
            /*width: 9100px;*/
            height: 400px;
            position: absolute;
            z-index: 1;
            top:0;
            left: 0;
            overflow: hidden;
        }
        #list img{
            float: left;
            /*width: 1300px;*/
            height: 400px;
        }
        #buttons{
            position: absolute;
            height: 10px;
            width: 100px;
            z-index: 2;
            bottom: 20px;
            left: 660px;
            text-align: center;
        }
        #buttons span{
            cursor: pointer;
            float: left;
            width: 10px;
            height: 10px;
            margin-right: 9px;
            display: inline-block;
            background-image: url(img/_eb1b95e.png);
            background-position: -1079px -687px;

        }
        #buttons .on{
            background-position: -1049px -687px;
        }
        .arrow{
            cursor: pointer;
            display: none;
            width: 36px;
            height: 76px;
            position: absolute;
            z-index: 2;
            top: 180px;
            background-color: rgba(0,0,0,.3);
            color: #fff;
        }
        #container:hover .arrow{
            display: block;
        }
        #prev{
            background: url(img/_eb1b95e.png);
            background-position: -569px -491px;
            left: 20px;
        }
        #next{
            background: url(img/_eb1b95e.png);
            background-position: -513px -491px;
            right: 20px;
        }
    </style>
</head>
<body>
    <div id="container">
        <div id="list" >
            <img src="img/5.jpg" alt="1"/>
            <img src="img/1.jpg" alt="1"/>
            <img src="img/2.jpg" alt="2"/>
            <img src="img/3.jpg" alt="3"/>
            <img src="img/4.jpg" alt="4"/>
            <img src="img/5.jpg" alt="5"/>
            <img src="img/1.jpg" alt="5"/>
        </div>
        <div id="buttons">
            <span index="1" class="on"></span>
            <span index="2"></span>
            <span index="3"></span>
            <span index="4"></span>
            <span index="5"></span>
        </div>
        <a href="javascript:;" id="prev" class="arrow"></a>
        <a href="javascript:;" id="next" class="arrow"></a>
    </div>

<script type="text/javascript" src="js/jquery.1.10.2.js"></script>
<script type="text/javascript">
        var container = $("#container");
        var list = $("#list");
        var listimg = $("#list img"); 
        var buttons = $("#buttons span");
        var prev = $("#prev");
        var next = $("#next");
        var index = 1;
        var len = 5;
        var num =len+2;
        var interval = 3000;//變換週期
        var timer; 
        var clientwidth=document.documentElement.clientWidth;//屏幕的寬度
        var conwidth = parseInt(clientwidth)-100;//顯示界面的寬度

    $(function(){


        setwidth();//設置container的寬度以及裏面元素list和list中img的寬度


        function animate(offset){
            var left = parseInt(list.css("left"))+offset;

            // list.animate({left:left+'px'},'normal');
            list.animate({left:left+'px'},conwidth,function(){
             //第一位規定產生動畫效果的樣式,第二位設置速度,第三位是動畫函數執行完後執行的函數
                if (left > -conwidth) {//如果是第一個元素還向前移,就讓最後一個元素是這個元素
                    list.css('left',-conwidth*len);
                }
                if (left < (-conwidth*len)) {//如果是最後一個元素還向後移,就讓第一個元素是這個元素
                    list.css('left', -conwidth);
                }
            });
        }

        function showbutton(){//通過操作css來將顯示的圖片代表的下方原點變大,其餘變小
            buttons.eq(index-1).addClass('on').siblings().removeClass('on');
        }

        function play(){
            timer = setTimeout(function(){
                next.trigger('click');//trigger()方法觸發被選元素的指定事件類型。
                play();
            },interval);
        }
        function stop(){
            clearTimeout(timer);
        }

        next.bind('click',function(){
            if (list.is(':animated')) {
                return;
            }
            if (index == 5) {
                index = 1;
            }
            else{
                index++;
            }
            animate(-conwidth);
            showbutton();
        });

        prev.bind('click',function(){
            if (list.is(':animated')) {
                return;
            }
            if (index == 1) {
                index = 5;
            }
            else{
                index--;
            }
            animate(conwidth);
            showbutton();
        });

        buttons.each(function(){
            $(this).bind('click',function(){
                if (list.is(':animated') || $(this).attr('class')=='on') {
                    return;
                }
                var myindex = parseInt($(this).attr('index'));
                var offset = -conwidth*(myindex - index);

                animate(offset);
                index = myindex;
                showbutton();
            })
        });

        container.hover(stop,play);//鼠標懸停時執行stop()函數,移開時執行play()

        play();

    });

      function setwidth(){//設置container的寬度以及裏面元素list和list中img的寬度

            container[0].style.width = conwidth +'px' ;
            list[0].style.width = num*conwidth +'px';
            list[0].style.left = '-'+conwidth +'px';
            for (var i = 0; i < listimg.length; i++) {
                listimg[i].style.width = conwidth + 'px';
            }
        }
</script>
</body>
</html>

2。實現思路
輪播圖的功能可分爲:自動循環播放,點擊左邊按鈕顯示前面圖片,點擊後邊顯示後面圖片,點擊下方的小圓點實現跳轉播放。

  1. 自動播放功能:設置一個定時器,每隔一個週期的時間,觸發一次點擊右邊按鈕的函數功能。
  2. 點擊左邊按鈕顯示前面圖片:首先我們應該瞭解到輪播圖的原理。圖解
    這裏寫圖片描述
    大盒子是container,小盒子是list,list裏面有很多圖片,沒有間隔的排列在一行,用絕對定位來操縱每次可以看到的圖片,也就是定位在container裏面的是可見部分。當點擊左邊的按鈕時,前面的圖片右移,相當於絕對定位中的left值加一個圖片的寬度。
  3. 點擊右邊按鈕顯示後面圖片:原理和左邊的相同,相當於圖片左移,讓後面的圖片顯示出來。
  4. 點擊下方的小圓點實現跳轉播放:此時頁面是第二個圖片,要跳轉到第五個,相當於點擊了三次右邊的按鈕,也相當於圖片左移三個圖片的寬度。

3。需要掌握的知識點:
css:

  • 絕對定位

js+jq:

document.documentElement.clientWidth;
obj.animate();
obj.css();
obj.eq()
obj.addClass();
obj.siblings();
obj.removeClass();
setTimeout();
clearTimeout();
obj.trigger();
obj.attr();
obj.bind();
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章