• 图片延迟加载


    1,图片加载JS

    var LazyLoad = function (options) {
        this.SetOptions(options);
        this.container = $(this.options.container);
        this.childs = $(this.options.container).find("[lazyload-src]");
        this.data = [];
        this.oldScroll = this.options.oldScroll;
        this.newScroll = this.options.newScroll;
        this.ImgWidth = this.options.ImgWidth;
        this.ImgHeight = this.options.ImgHeight;
        this.isZoom = this.options.isZoom;
        this.Initialize();
        this.ScrollLoad();
        this.ResizeLoad();
    };
    LazyLoad.prototype = {
        SetOptions: function (options) {  //初始化数据
            this.options = {
                container: null,  //父容器,要保证延迟加载的图片在该容器之内
                childs: null, //需要延迟加载的图片数组
                oldScroll: 0, //记录滚动条上次位置
                newScroll: 0, //滚动条当前位置
                isZoom: false, //是否启用缩放
                ImgWidth: 60, //要缩放图片的宽度
                ImgHeight: 60 //高度
            };
            $.extend(this.options, options || {}); //合并options
        },
        Initialize: function () { //初始化
            if (this.isZoom) {
                this.CreateImage()
            }
            this.Mheight = this.container.height() + this.container.offset().top; //记录父容器的最底端位置
            for (var i = 0; i < this.childs.length; i++) {
                this.data.push($(this.childs[i]).offset().top);
            }
            this.RunLoad()
        },
        CreateImage: function () { //获取需要延迟加载所有的真实URL保存到数组中
            this.image = [], this.image_src = [];
            for (var i = 0; i < this.childs.length; i++) {
                this.image_src.push($(this.childs[i]).attr("lazyload-src"));
                this.image.push(new Image());
            }
        },
        LoadImage: function (i) { //加载图片
            var _this = this;
            (function () {
                var index = i;
                $(_this.image[index]).load(function () {
                    if (_this.image[index].width == 0 || _this.image[index].height == 0) return;
                    _this.AutoScaling(_this.image[index], index);
                    _this.image[index] = new Image()
                });
                _this.image[index].src = _this.image_src[index]
            })()
        },
        AutoScaling: function (source, index) { //等比例缩放图片
            var childsImg = this.childs;
            if (source.width > 0 && source.height > 0) {
                if (source.width / source.height >= this.ImgWidth / this.ImgHeight) {
                    if (source.width > this.ImgWidth) {
                        $(childsImg[index]).width(this.ImgWidth);
                        $(childsImg[index]).height((source.height * this.ImgWidth) / source.width)
                    } else {
                        $(childsImg[index]).width(source.width);
                        $(childsImg[index]).height(source.height)
                    }
                } else {
                    if (source.height > this.ImgHeight) {
                        $(childsImg[index]).height(this.ImgHeight);
                        $(childsImg[index]).width((source.width * this.ImgHeight) / source.height)
                    } else {
                        $(childsImg[index]).width(source.width);
                        $(childsImg[index]).height(source.height);
                    }
                }
            }
            source = new Image();
        },
        Before: function () { //获取当前可视范围的对底部位置
            var _Cheight;
            _Cheight = $(window).height() + $(window).scrollTop();
            return _Cheight;
        },
        Compare: function (iHeight) { //根据当前图片的高度判定是否在可视范围内来决定是否需要加载图片
            var Cheight;
            Cheight = this.Before();
            return Cheight - iHeight;
        },
        RunLoad: function () { //延迟加载图片并缩放
            var compareValue, _this = this;
            this.oldScroll = $(window).scrollTop();
            for (var i = 0; i < this.data.length; i++) {
                compareValue = this.Compare(this.data[i]);
                if (compareValue > -0 && !!$(this.childs[i]).attr("lazyload-src")) {
                    $(this.childs[i]).removeAttr("lazyload-src");
                    $(this.childs[i]).attr("src", _this.image_src[i]);
                    if (this.isZoom)
                        this.LoadImage(i);
                    $(this.childs[i]).hide().fadeIn(300);
                }
            }
        },
        ScrollLoad: function () {  //绑定滚动条事件
            var _this = this;
            $(window).bind("scroll." + _this.options.container, function () {
                _this.newScroll = $(window).scrollTop();
                _this.StopLoad();
                if (_this.newScroll - _this.oldScroll < 0) { return; }
                _this.RunLoad();
            })
        },
        ResizeLoad: function () { //绑定调整窗体大小时事件
            var _this = this; $(window).bind("resize." + _this.options.container, function () { _this.RunLoad(); });
        },
        StopLoad: function () { // 当前位置已经完整显示出父容器最底部则解除事件
            var Cheight;
            Cheight = this.Before();
            if (Cheight > this.Mheight) {
                $(window).unbind("scroll." + this.options.container);
                $(window).unbind("resize." + this.options.container);
            }
        } 
    };
    

      

    2,代码显示

    <img style=" 100px; height: 100px;" src="/img/o_loading.jpg" lazyload-src="<%#Eval("bsSPicUrl").ToString().Replace("_sy", "_sm")%>" border="0" onerror="this.onerror=null;this.src='/img/err.jpg'"  alt="<%#TZB2B.Web.comHelp.GetTitleStr(Eval("bsTitle").ToString())%>">
    

      

  • 相关阅读:
    C++ 什么是多态
    *和&的使用
    静态链接库与动态链接库
    利尔达CC3200模块烧写程序笔记
    创龙TMS320C6748开发找不到 tl.dsp.evm6748的问题研究
    RTSC和XDCTool的理解
    创龙DSP6748开发板SYS/BIOS的LED闪烁-第2篇
    Coap协议学习笔记-第一篇
    linux进程的学习笔记(未完)
    创龙DSP6748开发板LED闪烁-第一篇
  • 原文地址:https://www.cnblogs.com/Aamir-Ye/p/4544361.html
Copyright © 2020-2023  润新知