1. 程式人生 > >jQuery.imgLazyLoad圖片懶載入元件

jQuery.imgLazyLoad圖片懶載入元件

$.extend({
    imgLazyLoad: function(options) {
        var config = {
                container: 'body',
                tabItemSelector: '',
                carouselItemSelector: '',
                attrName: 'imglazyload-src',
                diff: 0
            };
        $.extend( config, options 
|| {} ); var $container = $(config.container), offsetObj = $container.offset(), compareH = $(window).height() + $(window).scrollTop(), // 判斷容器是否為body子元素 bl = $.contains( document.body, $container.get(0) ), // 過濾快取容器中的圖片 notImgSelector = jQuery.imgLazyLoad.selectorCache ? ':not(' + jQuery.imgLazyLoad.selectorCache + ')' : '', imgSelector
= 'img[' + config.attrName + ']:visible' + notImgSelector, $filterImgs = $container.find(imgSelector), // 用於阻止事件處理 isStopEventHandle = false, // 是否自動懶載入,為true時,繫結滾動事件 isAutoLazyload = false; // 快取容器為body子元素的圖片選擇器 jQuery.imgLazyLoad.selectorCache = bl ? (jQuery.imgLazyLoad.selectorCache ? (jQuery.imgLazyLoad.selectorCache + ',' + config.container + ' img') : config.container + ' img') : jQuery.imgLazyLoad.selectorCache;
function handleImgLoad(idx) { if (isStopEventHandle) { return; } /** 處理Tab切換,圖片輪播,在處理$filterImgs時,沒有過濾img:not(.img-loaded),因為只是在一個面板中, 還有其他面板,如果再次觸發,可能$filterImgs.length為0,因此只能在外圍容器中判斷過濾圖片length */ if ($container.find('img:not(.img-loaded)').length === 0) { isStopEventHandle = true; } var itemSelector = config.tabItemSelector || config.carouselItemSelector || ''; if (itemSelector) { if (typeof idx !== undefined && idx >= 0) { $filterImgs = $container.find(itemSelector).eq(idx).find('img'); } else { if (itemSelector === config.carouselItemSelector) { $filterImgs = $container.find(itemSelector).eq(0).find('img'); } else { $filterImgs = $container.find(itemSelector + ':visible').find('img'); } } } else { $filterImgs = $filterImgs.not('.img-loaded'); // 自動懶載入,過濾已載入的圖片 isAutoLazyload = true; } // 當外圍容器位置發生變化,需更新 offsetObj = $container.offset(); if ($filterImgs.length > 0) { $filterImgs.each(function(idx, elem) { var $target = $(elem), targetTop = $target.offset().top, viewH = $(window).height() + $(window).scrollTop() + config.diff; if (bl) { $target.attr('src', $target.attr(config.attrName)).removeAttr(config.attrName).addClass('img-loaded'); } // 內容在視窗中 if (viewH > targetTop) { $target.attr('src', $target.attr(config.attrName)).removeAttr(config.attrName).addClass('img-loaded'); } }); } else { // 處理滾動事件 isStopEventHandle = true; $(window).unbind('resize scroll', handleImgLoad); } } handleImgLoad(); if (isAutoLazyload) { $(window).bind('resize scroll', handleImgLoad); } // 提供事件處理函式 return { handleImgLoad: handleImgLoad } } }); // 儲存非body子元素容器下的圖片選擇器 jQuery.imgLazyLoad.selectorCache = '';

相關推薦

jQuery.imgLazyLoad圖片載入元件

$.extend({ imgLazyLoad: function(options) { var config = { container: 'body', tabItemSelector: '',

jQuery實現圖片載入的兩種方法記錄

記錄一 整體思路: 設定個data-original(自定義一個屬性)來存放真實地址 當滾動頁面時,檢查所有的img標籤,看是否出現在視野中,如果已經出現在了視野中,那繼續再進行判斷,看其是否已經被載入過了,如果還沒有被載入過,那就進行載入。 程式碼: laz

Web圖片載入元件—Lazyload

在Web專案中,大量的圖片應用會導致頁面載入時間過長,浪費不必要的頻寬成本,還會影響使用者瀏覽體驗。 Lazyload 是一個檔案大小僅4kb的圖片懶載入元件(不依賴其它第三方庫),元件會根據使用者當前瀏覽的區域去自動載入對應的圖片(使用者還沒有瀏覽的區域圖片

基於Jquery的(可視區域,向上滾動向下滾動兩種)圖片載入

<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>Title</title> <style>

佔位圖和圖片載入專案實戰詳解

佔位圖(兜底圖): 真實圖片太大還沒有載入完之前先用一張佔位圖表示這個位置將來會有圖片或者說明這個位置是有圖片的但是不知道什麼原因真正的圖片沒有加載出來使用者只能看到這張佔位圖; 什麼是圖片懶載入: 懶載入也就是延遲載入,當訪問一個頁面的時候,先把img元素渲染出來,但是不給它真

vue 圖片載入 vue-lazyload

圖片懶載入 在實際的專案開發中,我們通常會遇見這樣的場景:一個頁面有很多圖片,而首屏出現的圖片大概就一兩張,那麼我們還要一次性把所有圖片都加載出來嗎?顯然這是愚蠢的,不僅影響頁面渲染速度,還浪費頻寬。這也就是們通常所說的首屏載入,技術上現實其中要用的技術就是圖片懶載入--到可視區域再載入。 vue中經常使

圖片載入的步驟

1、百度搜索v-lazy-npm 開啟首頁,然後在windows的cmd裡輸入npm install vue-lazyload --save (下載圖片懶載入的外掛) 2、複製下面程式碼到 main.js中 (注①:將有註釋刪掉的那句刪掉)(注②:粗體的那一句話、loading代表載入中的意

原生JS的(可視區域,向上滾動向下滾動兩種)圖片載入

<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>Title</title> <style>

手機端圖片載入

圖片懶載入是手機內嵌h5開啟網頁速度的優化方式之一,今天我就接受如何用最少的程式碼解決手機端的圖片懶載入問題 因為公司使用的h5都是vue做的,但是其他框架使用方式是一樣的 當後臺資料相應後,一般我們會在html這麼操作 <div class="image" v-for="item in a

如何結合外掛 vue-lazyload 來簡單實現圖片載入

外掛地址:https://www.npmjs.com/package/vue-lazyload; 一、使用場景: 在專案中有很多條數的資訊,且圖片很多的時候,不需要一次把整個頁面的圖片都載入完,而是在滾動到出現在螢幕才去載入該圖片的時候就可以用這個外掛。 二、簡單使用步驟: 1. 在專案裡面 npm

支援BetterScroll和iScroll滾動外掛的圖片載入的外掛

  做H5長頁面,內容都是一個個圖片。優化頁面速度,使用了圖片懶載入外掛。   下面我安利一款,我在網上尋找到這個懶載入外掛zhanyouwei/m-lazy,是支撐BetterScroll和iScroll滾動外掛的。 專案地址:https://github.com/zhanyou

圖片載入 滾動載入圖片載入)實現原理

滾動載入圖片(懶載入)實現原理   本文主要通過以下幾方面來說明懶載入技術的原理,個人前端小菜,有錯誤請多多指出 一、什麼是圖片滾動載入?   通俗的講就是:當訪問一個頁面的時候,先把img元素或是其他元素的背景圖片路徑替換成一張大小為1*1px圖片的路徑(這樣就

layui圖片載入-loading佔位圖

前言     使用layui的圖片懶載入,發現未載入的圖片沒有loading佔位圖,顯示的是裂圖,看著不是很好。找了一些解決方法我統一記錄一下。 layui圖片懶載入使用方法 layui.use(’flow’, function(){ var flow = l

vue中使用圖片載入vue-lazyload外掛指南

使用方式 使用vue的 vue-lazyload 外掛 外掛地址: https://www.npmjs.com/package/vue-lazyload Installation 安裝方式 1. np

圖片載入 -- 爬蟲

圖片懶載入 什麼是圖片懶載入?   圖片懶載入是一種網頁優化技術。圖片作為一種網路資源,在被請求時也與普通靜態資源一樣,將佔用網路資源,而一次性將整個頁面的所有圖片載入完,將大大增加頁面的首屏載入時間。為了解決這種問題,通過前後端配合,使圖片僅在瀏覽器當前視窗內出現時才載入該圖片,達到減少首屏圖片請求數的

vue-lazyload 圖片載入

第一步npm install  vue-lazyload --save 然後在main.js裡引入 import VueLazyLoad from 'vue-lazyload' 然後使用這個VueLazyLoad Vue.use(VueLazyLoad,{ loadin

小程式圖片載入

Page({ data:{ // text:"這是一個頁面" hidden: false,

用angularjs指令寫一個圖片載入

思路: 先用一個比較小的img圖片提示使用者,正在載入圖片;等圖片載入完畢後,再顯示需要的圖片。 html:src為預設顯示的圖片,lazy-src為需要懶載入的圖片 <img image-lazy-load src="" lazy-src="..

vue-lazyload實現圖片載入的方式

1、安裝vue-lazyload npm install --save vue-lazyload 2、在main.js中引入並申明使用 (1)引入 import VueLazyload from 'vue-lazyload' (2)申明使用 Vue.use(Vue

圖片載入

html: <img src="/images/nullspecail.jpg" data-title="測試" data-src="http://kangsf1989.net/120-147-b.jpg"alt=""> js: <script>