jQuery-lazyload圖片延遲加載使用詳解

lazyload是一個(gè)jQuery的插件趁俊,當(dāng)你的項(xiàng)目中有很多圖片或者有大圖的時(shí)候,你希望只有在滾動(dòng)條快滾動(dòng)到圖片的位置時(shí)再加載圖片,而如果用戶沒有再往下滾動(dòng)滾動(dòng)條的時(shí)候,圖片不需要加載鲜漩,那么,你就可以用到這個(gè)插件集惋,它的作用就是延遲加載孕似。
我們先來看一個(gè)特別簡單的示例,然后再看看他們中的每一塊代表什么意思:


jQuery-lazyload 示例.jpeg

具體的原理我這里就不做過多介紹刮刑,您可以到文章最后的幾個(gè)地址進(jìn)行了解喉祭。我寫這篇文章的目的是想直接通過代碼的方式能讓你馬上上手使用,所以下面我會(huì)把整理的代碼展示出來雷绢。

在你項(xiàng)目中的img標(biāo)簽可以像下面這樣寫:

<img class="lazyload" src="./img/清晰度較低或者loading的gif圖片.jpg" 
alt="活動(dòng)現(xiàn)場圖片" 
data-original="./img/真正想要顯示的圖片.jpg" 
width="750" height="360">

<!--
注1:添加width和height有助于在圖片未加載時(shí)占滿所需要的空間
注2:class="lazyload" 是為了區(qū)別哪些圖片需要延遲加載泛烙,哪些不需要。
這個(gè)例子中翘紊,我們只針對img標(biāo)簽中class帶lazyload的需要延時(shí)加載處理蔽氨。
而lazyload你可以隨你自己取class名。
-->

使用lazyload肯定要先引用jQuery文件:

<script src="js/jquery-3.1.1.min.js"></script>
<script src="js/lazyload.min.js"></script>

jQuery的代碼可以像下面這樣寫:

    $(function () {
        $("img.lazyload").lazyload({
            threshold: 200,
            effect: "fadeIn"
        });
    });

.lazyload()里面帶了兩個(gè)參數(shù)帆疟,他們分別代表什么意思孵滞,還有沒有其他的參數(shù)呢?

threshold: 200,    // 當(dāng)距離圖片還有200像素的時(shí)候鸯匹,就開始加載圖片。

effect: "fadeIn",  // 控制顯示圖片的效果泄伪,fadeIn的效果淡入動(dòng)畫殴蓬。

container: $("#container")  // 父容器。指定哪個(gè)父容器中的圖片延遲加載。

event: "click",     // 默認(rèn)的觸發(fā)事件是滾動(dòng)染厅,當(dāng)你滾動(dòng)的時(shí)候痘绎,就會(huì)檢查然后加載。
                       你可以使用event屬性肖粮,設(shè)置你自己的加載事件孤页,之后你可以自定義觸發(fā)這個(gè)事件的條件,然后去加載圖像涩馆。

// event: 'scrollstop' // 當(dāng)頁面中存在上百張行施,甚至數(shù)百張圖片時(shí),建議使用 scrollstop 事件魂那。
                       scrollstop 介紹地址:https://j11y.io/javascript/special-scroll-events-for-jquery/

具體參數(shù)說明

/*
* container:window  

* event:  默認(rèn)值 'scroll',另外還有scrollstop蛾号,sporty,click

* effect: 默認(rèn)值 'show'涯雅,加載使用的動(dòng)畫效果鲜结。
          如 show, fadeIn, slideDown 等 jQuery 自帶的效果,或者自定義動(dòng)畫活逆。

* effectspeed: 默認(rèn)值 undefined精刷,動(dòng)畫時(shí)間。
               作為 effect 的參數(shù)使用:effect(effectspeed)

* data_attribute: 默認(rèn)值 'original'蔗候,真實(shí)圖片地址的 data 屬性后綴

* threshold: 默認(rèn)值 0怒允,靈敏度。
             表示當(dāng)圖片出現(xiàn)在顯示區(qū)域中的立即加載顯示琴庵;
             設(shè)為整數(shù)表示圖片距離 x 像素進(jìn)入顯示區(qū)域時(shí)進(jìn)行加載误算;
             設(shè)為負(fù)數(shù)表示圖片進(jìn)入顯示區(qū)域 x 像素時(shí)進(jìn)行加載。

* failure_limit: 默認(rèn)值 0迷殿,容差范圍儿礼。
                 頁面滾動(dòng)時(shí),Lazy Load 會(huì)遍歷延遲加載的圖片庆寺,檢查是否在顯示區(qū)域內(nèi)蚊夫,
                 默認(rèn)找到第 1 張不可見的圖片時(shí),就終止遍歷懦尝。
                 因?yàn)?Lazy Load 認(rèn)為圖片的排序是與 HTML 中的代碼中的排序相同知纷,但是也可能會(huì)出現(xiàn)例外,
                 通過該值來擴(kuò)大容差范圍陵霉。

* skip_invisible: 默認(rèn)值 true琅轧,跳過隱藏的圖片。圖片不可見時(shí)(如 display:none)踊挠,不強(qiáng)制加載乍桂。

* appear: 默認(rèn)值 null,圖片加載時(shí)的事件 (Function),
          有 2 個(gè)參數(shù):elements_left(未加載的圖片數(shù)量)睹酌、settings(lazyload 的參數(shù))权谁。

* load: 默認(rèn)值 null,圖片加載后的事件 (Function)憋沿,
        有 2 個(gè)參數(shù)旺芽,同 appear 。
*
* */

注1: 當(dāng)你指定了哪個(gè)父容器中的圖片做延遲加載時(shí)辐啄,你需要給這個(gè)父容器寫一寫樣式采章,例如:

#container {
     height: 600px;
     overflow: scroll;
}

而jQuery代碼可以像下面這樣寫:

$("img.lazyload").lazyload({
    container: $("#container")  
});

當(dāng)瀏覽器不支持 JavaScript 時(shí)的降級(jí)處理

<img class="hide" src="清晰度較低或者loading的gif圖片.jpg" data-original="example.jpg" width="765" height="574">
<noscript><img src="./img/真實(shí)的圖像.jpg" width="765" height="574"></noscript>

<!--noscript 包含真實(shí)的圖像位置,當(dāng)瀏覽器不支持 Javascript则披,直接顯示圖像共缕。
對現(xiàn)有圖像,隱藏處理士复,使用 show() 方法觸發(fā)顯示图谷。-->

上面的class="hide"我們需要給它添加一行樣式:

.hide {
    display: none;
}

這個(gè)時(shí)候,我們的jQuery代碼可以像下面這樣寫:

$("img.hide").show().lazyload({
   effect: "fadeIn"
});

另一個(gè)使用場景:當(dāng)前顯示區(qū)域內(nèi)的圖片先進(jìn)行加載阱洪,顯示區(qū)域外的圖片延遲5秒之后再加載

這個(gè)地方需要用event:'sporty'
jQuery的具體代碼如下:

$(function(){
    $('img').lazyload({
        effect:'fadeIn',
        event:'sporty'
    });
});

$(window).bind('load', function(){
    var timeout = setTimeout(function(){
        $('img').trigger('sporty')
    }, 5000);
});

以上內(nèi)容部分參考自下面的文章:
緩沖加載圖片的 jQuery 插件 lazyload.js 使用方法詳解
jQuery Lazy Load 圖片延遲加載
示例

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末便贵,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子冗荸,更是在濱河造成了極大的恐慌承璃,老刑警劉巖,帶你破解...
    沈念sama閱讀 210,914評論 6 490
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件蚌本,死亡現(xiàn)場離奇詭異盔粹,居然都是意外死亡,警方通過查閱死者的電腦和手機(jī)程癌,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 89,935評論 2 383
  • 文/潘曉璐 我一進(jìn)店門舷嗡,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人嵌莉,你說我怎么就攤上這事进萄。” “怎么了锐峭?”我有些...
    開封第一講書人閱讀 156,531評論 0 345
  • 文/不壞的土叔 我叫張陵中鼠,是天一觀的道長。 經(jīng)常有香客問我沿癞,道長援雇,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 56,309評論 1 282
  • 正文 為了忘掉前任椎扬,我火速辦了婚禮熊杨,結(jié)果婚禮上曙旭,老公的妹妹穿的比我還像新娘。我一直安慰自己晶府,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 65,381評論 5 384
  • 文/花漫 我一把揭開白布钻趋。 她就那樣靜靜地躺著川陆,像睡著了一般。 火紅的嫁衣襯著肌膚如雪蛮位。 梳的紋絲不亂的頭發(fā)上较沪,一...
    開封第一講書人閱讀 49,730評論 1 289
  • 那天,我揣著相機(jī)與錄音失仁,去河邊找鬼尸曼。 笑死,一個(gè)胖子當(dāng)著我的面吹牛萄焦,可吹牛的內(nèi)容都是我干的控轿。 我是一名探鬼主播,決...
    沈念sama閱讀 38,882評論 3 404
  • 文/蒼蘭香墨 我猛地睜開眼拂封,長吁一口氣:“原來是場噩夢啊……” “哼茬射!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起冒签,我...
    開封第一講書人閱讀 37,643評論 0 266
  • 序言:老撾萬榮一對情侶失蹤在抛,失蹤者是張志新(化名)和其女友劉穎,沒想到半個(gè)月后萧恕,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體刚梭,經(jīng)...
    沈念sama閱讀 44,095評論 1 303
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 36,448評論 2 325
  • 正文 我和宋清朗相戀三年票唆,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了朴读。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 38,566評論 1 339
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡惰说,死狀恐怖磨德,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情吆视,我是刑警寧澤典挑,帶...
    沈念sama閱讀 34,253評論 4 328
  • 正文 年R本政府宣布,位于F島的核電站啦吧,受9級(jí)特大地震影響您觉,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜授滓,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,829評論 3 312
  • 文/蒙蒙 一琳水、第九天 我趴在偏房一處隱蔽的房頂上張望肆糕。 院中可真熱鬧,春花似錦在孝、人聲如沸诚啃。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,715評論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽始赎。三九已至,卻和暖如春仔燕,著一層夾襖步出監(jiān)牢的瞬間造垛,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 31,945評論 1 264
  • 我被黑心中介騙來泰國打工晰搀, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留五辽,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 46,248評論 2 360
  • 正文 我出身青樓外恕,卻偏偏與公主長得像杆逗,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個(gè)殘疾皇子吁讨,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 43,440評論 2 348