1. 程式人生 > >如何編寫jquery外掛之輪播圖

如何編寫jquery外掛之輪播圖

對於一位合格的前端開發人員來說,首頁圖片輪播可謂是必會的基本功。那麼我們聊一聊如何用jquery封裝自己的輪播外掛。

首先必須要聊到的jquery為我們提供的兩大擴充套件方法,$.fn和$.extend(),$.extend相當於為jQuery類(注意,JavaScript並沒有類,我們只是以類來理解這種做法)新增靜態方法,

$.fn其實就是jQuery.prototype,原型,對於新手比較難解的概念,可以簡單的理解為,我更改了印章,印章印出來的每個印記都會受到印章的影響,可謂釜底抽薪,JavaScript原型鏈相對較為複雜,JavaScript的繼承特性便是基於原型實現的,在編寫大規模的JavaScript程式碼的時候,以面向物件的方式編寫才會顯得有價值,我們在此不贅述。

好了,我們有了上述的知識儲備,我們開始編寫輪播外掛。

<!DOCTYPE html>
<html lang="en">

<head>
    <title></title>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1">
    <link href="main.css" rel="stylesheet">
    <script src="./js/jquery-1.10.2.min.js"></script>
    <script src="./js/jquery.slider.js"></script>
    <script src="./js/main.js"></script>
</head>

<body>
    <div class="slider">
        <div class="slider_img">
            <a class="slider-active" href="#" style="background: url(./img/nav1.jpg) 50% no-repeat; background-size: cover; opacity: 1;"></a>
            <a href="#" style="background: url(./img/nav2.jpg) 50% no-repeat; background-size: cover;"></a>
            <a href="#" style="background: url(./img/nav3.jpg) 50% no-repeat; background-size: cover;"></a>
            <a href="#" style="background: url(./img/nav4.jpg) 50% no-repeat; background-size: cover;"></a>
            <a href="#" style="background: url(./img/nav5.jpg) 50% no-repeat; background-size: cover;"></a>
        </div>
        <span id="left" class="arrow-icon"><<</span>
        <span id="right" class="arrow-icon">>></span>
        <div class="slider_icon">
            <span class="active"></span>
            <span></span>
            <span></span>
            <span></span>
            <span></span>
        </div>
    </div>
</body>

</html>
這是HTML程式碼的結構,需要一個向左,一個向右按鈕和對應輪播圖片數目的icon按鈕,建議大家用a標籤設定圖片的容器,比較好操作。

CSS我就不貼了,之後我會將其上傳。

最重要的是JavaScript程式碼:

(function($) {

    $.fn.slider = function(options) {

        //this指向當前的選擇器

        var config = {
            index: 0,
            timer: null,
            speed: 3000,
            min: 0.3, //和css中的樣式對應
            max: 1
        };

        var opts = $.extend(config, options);

        //核心方法,把當前index的圖片和icon顯示,把除此之外的圖片和icon隱藏
        var core = function() {
            if (opts.index > 4) {
                opts.index = 0;
            } else if (opts.index < 0) {
                opts.index = 4;
            }
            $(".slider_icon span").eq(opts.index).addClass("active").siblings("span").removeClass("active");
            $(".slider_img a").eq(opts.index).css("display", "block").stop().animate({ "opacity": opts.max }, 1000).siblings("a").css({ "display": "none", "opacity": opts.min });
        };
        //左邊
        $(this).find("#left").bind("click", function() {
            --opts.index;
            core();
        });

        //右邊
        $(this).find("#right").bind("click", function() {
            ++opts.index;
            core();
        });

        //每個icon分配事件
        $(this).find(".slider_icon").on("click", "span", function() {
            var index = $(this).index();
            opts.index = index;
            core();
        });

        //定時器

        var start = function() {
            opts.timer = setInterval(function() {
                ++opts.index;
                core();
            }, opts.speed);
        }



        $(this).hover(function() {
            clearInterval(opts.timer);
        }, function() {
            start();
        });


        start();

    }
}(jQuery));

1:core方法,其實圖片輪播的本質就是把當前索引的圖片顯示,導航icon高亮,其餘的隱藏,我做的是淡入淡出。

2:向左,向右,導航其實無非就是index的改變,jquery提供了一個index()方法,可以獲得所有匹配元素中當前元素的索引,從0開始。

3:定時器,要實現圖片的自動導航,無非就是每隔一定的時間,index+1。另外,當滑鼠放入的時候,要清楚定時器,當輸入移出的時候,再開啟定時器。

以上三點就是輪播的核心要點,任何輪播圖都不會脫離這個程式設計模式。

最後,小的奉上自己的輪播外掛,忘大神輕噴。安靜