摘要:之前寫過(guò)一版圖片懶加載的文章,剛好周末在整理文件的時(shí)候,大概又看了一遍之前寫的代碼發(fā)現(xiàn)有很多可以優(yōu)化的地方。這篇文章主要就是結(jié)合上篇瀑布流式圖片懶加載代碼示例再來(lái)看看圖片懶加載的一些知識(shí)。
之前寫過(guò)一版圖片“懶加載”的文章,剛好周末在整理文件的時(shí)候,大概又看了一遍之前寫的代碼發(fā)現(xiàn)有很多可以優(yōu)化的地方。
這篇文章主要就是結(jié)合上篇《“瀑布流式”圖片懶加載代碼示例》再來(lái)看看圖片“懶加載”的一些知識(shí)。
圖片“懶加載”的主旨:
按照需要加載圖片,也就是說(shuō)需要顯示的時(shí)候再加載圖片顯示,減少一次性加載的網(wǎng)絡(luò)帶寬開銷。
先來(lái)看一段代碼:
var conf = { "loadfirst": true, "loadimg": true }; for (var item in conf) { if (item in co) { conf.item = co.item; } }
這里我主要是想實(shí)現(xiàn),用戶配置和默認(rèn)配置的合并,這樣寫代碼并不是很優(yōu)雅,現(xiàn)在使用$.extend來(lái)做優(yōu)化,代碼如下:
_this.setting = { "mobileHeight": 0, //擴(kuò)展屏幕的高度,使第一屏加載個(gè)數(shù)可配置 "loadNum": 1 //滾動(dòng)時(shí),當(dāng)前節(jié)點(diǎn)之后加載個(gè)數(shù) }; $.extend(_this.setting, _this.getSetting());
這里重點(diǎn)介紹下,我新添加的兩個(gè)參數(shù)mobileHeight,loadNum
mobileHeight 默認(rèn)客戶端的高度,值越大,首屏加載的圖片越多;
loadNum 如果當(dāng)前節(jié)點(diǎn)出現(xiàn)在屏幕上以后,可以一次性加載當(dāng)前節(jié)點(diǎn)之后的若干個(gè)節(jié)點(diǎn),可以跳高圖片的加載速度;
之前我的代碼是這樣子寫的:
_this.loadFirstScreen = function() { if (conf.loadfirst) { lazyNode.each(function(i) { currentNodeTop = $(this).offset().top; //這里的800就是上面提到的mobileHeight if (currentNodeTop < mobileHeight + 800) { _this.replaceImgSrc($(this)); } }); } }; _this.loadImg = function() { if (conf.loadimg) { $(window).on("scroll", function() { var imgLazyList = $("[node-type=imglazy]", node); //這里的5就是上面提到的loadNum for (var i = 0; i < 5; i++) { _this.replaceImgSrc(imgLazyList.eq(i)); } }); } };
按照可配置的想法來(lái)優(yōu)化我現(xiàn)在的代碼就是下面的這個(gè)樣子的:
loadFirstSrceen: function() { // 加載首屏 var _this = this; var currentNodeTop; var imgNodeList = _this.imgNode; $(imgNodeList).each(function() { currentNodeTop = $(this).offset().top; if (currentNodeTop < _this.mobileHeight() + _this.setting.mobileHeight) { _this.replaceImgSrc($(this)); } }); }, scrollLoadImg: function() { //滾動(dòng)的時(shí)候加載圖片 var _this = this; var currentNodeTop; var scrollTop = $("body").scrollTop(); var imgLazyList = $("[node-type=imglazy]"); $(imgLazyList).each(function() { currentNodeTop = $(this).offset().top; if (currentNodeTop - scrollTop < _this.mobileHeight()) { //加載當(dāng)前節(jié)點(diǎn)后的規(guī)定個(gè)數(shù)節(jié)點(diǎn) for (var i = 0, len = _this.setting.loadNum; i < len; i++) { _this.replaceImgSrc($(imgLazyList).eq(i)); } return false; } }); }
更重要的一個(gè)方面就是按照編寫插件的思想來(lái)組織現(xiàn)在的代碼結(jié)構(gòu)。代碼如下:
;(function($) { var LoadImgLazy = function(imgNode) { var _this = this; _this.imgNode = imgNode; _this.setting = { "mobileHeight": 0, //擴(kuò)展屏幕的高度,使第一屏加載個(gè)數(shù)可配置 "loadNum": 1 //滾動(dòng)時(shí),當(dāng)前節(jié)點(diǎn)之后加載個(gè)數(shù) }; $.extend(_this.setting, _this.getSetting()); _this.loadFirstSrceen(); $(window).on("scroll", function() { _this.scrollLoadImg(); }); }; LoadImgLazy.prototype = { mobileHeight: function() { return $(window).height(); }, loadFirstSrceen: function() { // 加載首屏 var _this = this; var currentNodeTop; var imgNodeList = _this.imgNode; $(imgNodeList).each(function() { currentNodeTop = $(this).offset().top; if (currentNodeTop < _this.mobileHeight() + _this.setting.mobileHeight) { _this.replaceImgSrc($(this)); } }); }, scrollLoadImg: function() { //滾動(dòng)的時(shí)候加載圖片 var _this = this; var currentNodeTop; var scrollTop = $("body").scrollTop(); var imgLazyList = $("[node-type=imglazy]"); $(imgLazyList).each(function() { currentNodeTop = $(this).offset().top; if (currentNodeTop - scrollTop < _this.mobileHeight()) { //加載當(dāng)前節(jié)點(diǎn)后的規(guī)定個(gè)數(shù)節(jié)點(diǎn) for (var i = 0, len = _this.setting.loadNum; i < len; i++) { _this.replaceImgSrc($(imgLazyList).eq(i)); } return false; } }); }, replaceImgSrc: function(loadImgNode) { //動(dòng)態(tài)替換圖片 var srcValue; var imgDataSrc; var _this = this; var imgUrlList = $(loadImgNode).find("img[data-lazysrc]"); if (imgUrlList.length > 0) { imgUrlList.each(function(i) { imgDataSrc = $(this).attr("data-lazysrc"); srcValue = $(this).attr("src"); if (srcValue === "#") { if (imgDataSrc) { $(this).attr("src", imgDataSrc); $(this).removeAttr("data-lazysrc"); } } }); //移除已經(jīng)運(yùn)行過(guò)懶加載節(jié)點(diǎn)的node-type 對(duì)性能提升 $(loadImgNode).removeAttr("node-type"); } }, getSetting: function() { var userSetting = $("[lazy-setting]").attr("lazy-setting"); if (userSetting && userSetting !== "") { return $.parseJSON(userSetting); } else { return {}; } }, destory: function() { //銷毀方法區(qū) $(window).off("scroll"); } }; LoadImgLazy.init = function(imgNode) { new this(imgNode); }; window.LoadImgLazy = LoadImgLazy; })(Zepto);
示例 Demo 地址,歡迎下載及反饋問(wèn)題。
文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請(qǐng)注明本文地址:http://m.specialneedsforspecialkids.com/yun/78733.html
摘要:一一些閑話作為一個(gè)寫靜態(tài)的切圖仔,其實(shí)日常工作中根本用不上瀑布流這種小清新,畢竟?fàn)I銷頁(yè)面都是要求搶眼吸睛高大上文案爸爸說(shuō)啥都對(duì)。昨上午閑著沒事看到別人寫的瀑布流的帖子,覺得很好玩的樣子,然后決定上午就寫一個(gè)試試。。。 一、一些閑話 作為一個(gè)寫靜態(tài)的切圖仔,其實(shí)日常工作中根本用不上瀑布流這種小清新,畢竟?fàn)I銷頁(yè)面都是要求 搶眼__、__吸睛__、 __高大上 (文案爸爸說(shuō)啥都對(duì))。 昨上...
摘要:前言最近在整理基礎(chǔ)知識(shí),接觸到了幾個(gè)常用的頁(yè)面特效,其中覺得用原生實(shí)現(xiàn)瀑布流的案例十分有趣,于是與大家分享一下。瀑布流瀑布流,又稱瀑布流式布局。通過(guò)定位的方式是我們實(shí)現(xiàn)瀑布流的最基本的原理,只要我們動(dòng)態(tài)的設(shè)置它的值值,就能讓它排列。 showImg(https://segmentfault.com/img/remote/1460000012621941?w=1052&h=542); 前...
摘要:何為瀑布流瀑布流,又稱瀑布流式布局。最早采用此布局的網(wǎng)站是,逐漸在國(guó)內(nèi)流行開來(lái)。四是服裝款式設(shè)計(jì)資訊平臺(tái)如看潮網(wǎng)等等。 何為瀑布流: 瀑布流,又稱瀑布流式布局。是比較流行的一種網(wǎng)站頁(yè)面布局,視覺表現(xiàn)為參差不齊的多欄布局,隨著頁(yè)面滾動(dòng)條向下滾動(dòng),這種布局還會(huì)不斷加載數(shù)據(jù)塊并附加至當(dāng)前尾部。最早采用此布局的網(wǎng)站是Pinterest,逐漸在國(guó)內(nèi)流行開來(lái)。國(guó)內(nèi)大多數(shù)清新站基本為這類風(fēng)格。 ...
摘要:何為瀑布流瀑布流,又稱瀑布流式布局。最早采用此布局的網(wǎng)站是,逐漸在國(guó)內(nèi)流行開來(lái)。四是服裝款式設(shè)計(jì)資訊平臺(tái)如看潮網(wǎng)等等。 何為瀑布流: 瀑布流,又稱瀑布流式布局。是比較流行的一種網(wǎng)站頁(yè)面布局,視覺表現(xiàn)為參差不齊的多欄布局,隨著頁(yè)面滾動(dòng)條向下滾動(dòng),這種布局還會(huì)不斷加載數(shù)據(jù)塊并附加至當(dāng)前尾部。最早采用此布局的網(wǎng)站是Pinterest,逐漸在國(guó)內(nèi)流行開來(lái)。國(guó)內(nèi)大多數(shù)清新站基本為這類風(fēng)格。 ...
摘要:何為瀑布流瀑布流,又稱瀑布流式布局。最早采用此布局的網(wǎng)站是,逐漸在國(guó)內(nèi)流行開來(lái)。四是服裝款式設(shè)計(jì)資訊平臺(tái)如看潮網(wǎng)等等。 何為瀑布流: 瀑布流,又稱瀑布流式布局。是比較流行的一種網(wǎng)站頁(yè)面布局,視覺表現(xiàn)為參差不齊的多欄布局,隨著頁(yè)面滾動(dòng)條向下滾動(dòng),這種布局還會(huì)不斷加載數(shù)據(jù)塊并附加至當(dāng)前尾部。最早采用此布局的網(wǎng)站是Pinterest,逐漸在國(guó)內(nèi)流行開來(lái)。國(guó)內(nèi)大多數(shù)清新站基本為這類風(fēng)格。 ...
閱讀 2950·2023-04-26 01:49
閱讀 2079·2021-10-13 09:39
閱讀 2291·2021-10-11 11:09
閱讀 931·2019-08-30 15:53
閱讀 2823·2019-08-30 15:44
閱讀 930·2019-08-30 11:12
閱讀 2986·2019-08-29 17:17
閱讀 2380·2019-08-29 16:57