jQuery屢次點擊事件切換狀態

今天的需求是這樣。html

移動端頁面,有一篇比較長的文章,大概有二十幾個段落。展示在用戶面前的只是前面的六個段落,用戶點擊按鈕,再展開六個段落,直到整個文章加載完畢,按鈕內容變成「收起文章內容」。spa

好吧,不管之後別的項目是否須要整個功能,我先封裝起來。code

六個初始狀態就是展開的段落,偷懶了下, 放在article_show的父元素下,而隱藏的,則放在 class 名爲 article_lazy 的父元素下,這樣寫js能夠省點事。htm

$(function () {
    function lazyLoad(article, showNum, btn, oHtml) {
        var oP = $(article).children();//須要隱藏的每一個段落
        var num = 0;//初始化
        var oBtn = $(btn);//點擊按鈕
        var txt = oBtn.html();//保存按鈕的html內容

        oBtn.on('click', function () {
            num++;//每次點擊累計
            var len = showNum*num; //展示段落 = 每次點擊要展開的段落數*點擊次數
            for(var i=len-showNum; i<len; i++){  //開始循環的段落 = 展示段落-已經展示的段落
                //console.log(i);
                if(!oP.hasClass()){ //判斷段落是否隱藏,若是隱藏
                    $(oP[i]).addClass("active");
                }
            }

            if($(oP[oP.length-showNum]).hasClass('active')){ //判斷倒數showNum個段落是否隱藏,是否已到文章底部
                oBtn.text(oHtml).on('click', function () { //更改按鈕的內容,綁定點擊事件
                    oP.removeClass('active'); //點擊後,段落所有隱藏。(偷懶不是英明的吧。。。)
                    oBtn.html(function () { //點擊後,按鈕內容切換爲原來的內容。
                        return txt;
                    });
                });
            }
        })
    }
    lazyLoad('.article_lazy', 6, '.more','收起文章內容');

});
相關文章
相關標籤/搜索