jQuery多次点击事件切换状态

今天的需求是这样。

移动端页面,有一篇比较长的文章,大概有二十几个段落。展现在用户面前的只是前面的六个段落,用户点击按钮,再展开六个段落,直到整个文章加载完毕,按钮内容变成“收起文章内容”。

好吧,无论以后别的项目是否需要整个功能,我先封装起来。

六个初始状态就是展开的段落,偷懒了下, 放在article_show的父元素下,而隐藏的,则放在 class 名为 article_lazy 的父元素下,这样写js可以省点事。

$(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','收起文章内容');

});
原文地址:https://www.cnblogs.com/dodocie/p/7716472.html