国产xxxx99真实实拍_久久不雅视频_高清韩国a级特黄毛片_嗯老师别我我受不了了小说

資訊專欄INFORMATION COLUMN

“瀑布流式”圖片懶加載代碼解析及優(yōu)化(二)

appetizerio / 1096人閱讀

摘要:之前寫過(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

相關(guān)文章

  • 原生 js 實(shí)現(xiàn)面對(duì)對(duì)象版瀑布

    摘要:一一些閑話作為一個(gè)寫靜態(tài)的切圖仔,其實(shí)日常工作中根本用不上瀑布流這種小清新,畢竟?fàn)I銷頁(yè)面都是要求搶眼吸睛高大上文案爸爸說(shuō)啥都對(duì)。昨上午閑著沒事看到別人寫的瀑布流的帖子,覺得很好玩的樣子,然后決定上午就寫一個(gè)試試。。。 一、一些閑話 作為一個(gè)寫靜態(tài)的切圖仔,其實(shí)日常工作中根本用不上瀑布流這種小清新,畢竟?fàn)I銷頁(yè)面都是要求 搶眼__、__吸睛__、 __高大上 (文案爸爸說(shuō)啥都對(duì))。 昨上...

    tommego 評(píng)論0 收藏0
  • 原生js實(shí)現(xiàn)瀑布流效果

    摘要:前言最近在整理基礎(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); 前...

    wangdai 評(píng)論0 收藏0
  • jQuery實(shí)現(xiàn)瀑布流效果

    摘要:何為瀑布流瀑布流,又稱瀑布流式布局。最早采用此布局的網(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)格。 ...

    mumumu 評(píng)論0 收藏0
  • jQuery實(shí)現(xiàn)瀑布流效果

    摘要:何為瀑布流瀑布流,又稱瀑布流式布局。最早采用此布局的網(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)格。 ...

    pcChao 評(píng)論0 收藏0
  • jQuery實(shí)現(xiàn)瀑布流效果

    摘要:何為瀑布流瀑布流,又稱瀑布流式布局。最早采用此布局的網(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)格。 ...

    mgckid 評(píng)論0 收藏0

發(fā)表評(píng)論

0條評(píng)論

appetizerio

|高級(jí)講師

TA的文章

閱讀更多
最新活動(dòng)
閱讀需要支付1元查看
<