今天的需求是這樣。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','收起文章內容'); });