惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

N
Netflix TechBlog - Medium
J
Java Code Geeks
爱范儿
爱范儿
雷峰网
雷峰网
OSCHINA 社区最新新闻
OSCHINA 社区最新新闻
Cyber Security Advisories - MS-ISAC
Cyber Security Advisories - MS-ISAC
博客园 - 三生石上(FineUI控件)
H
Hackread – Cybersecurity News, Data Breaches, AI and More
B
Blog RSS Feed
Google DeepMind News
Google DeepMind News
Jina AI
Jina AI
The GitHub Blog
The GitHub Blog
I
InfoQ
月光博客
月光博客
博客园 - 聂微东
博客园 - Franky
The Cloudflare Blog
阮一峰的网络日志
阮一峰的网络日志
博客园_首页
G
Google Developers Blog
Blog — PlanetScale
Blog — PlanetScale
L
LangChain Blog
罗磊的独立博客
Apple Machine Learning Research
Apple Machine Learning Research

博客园 - 骑牛射雕

Visual Studio 安装 旧版本(.NET Framework 4.0 和 4.5) 安装程序提示SWbemObjectSet:无效类处理方案 VSTO开发入门,CustomUI元素详解 线程池ThreadPool wpf combobox 绑定枚举 c# 相同类 赋值 WPF 使用Path绘制几何图形 Prism简介 WPF使用PATH来画圆 经过指定的时间后自动关闭的模式窗体 非对称加密 inno setup 安装前判断进程是否存在,以及停止相应进程 Inno Setup打包CreateProcess 740出错 C#委托与事件应用场景 X.509数字证书的结构与解析 C#action和func的使用 Oracle 分析函数(10G)语法详解 纯JS写的无刷新实时同步购物车系统 几种调用WebService的方法
图片延时加载插件(lazyload)
骑牛射雕 · 2013-04-24 · via 博客园 - 骑牛射雕

图片延时加载(lazyload)是网站常用的一种手段,目的是为了减少页面加载时向服务器的请求数,这里分享一款支持大部分情况下(如IPAD浏览、异步加载、某个范围加载)的图片延时加载插件。

代码及效果

先贴代码:

复制代码

  $.extend({
            imgLoad: function (options) {
                options = $.extend({
                    container: "img",//集合
                    time: 600,//滚动时定时刷新时间
                    attribute: "src2" //保存原图地址的自定义属性
                }, options);
                var container = options.container, n = n || 0, tim, _time = 0;
                Load();
                function GetHeight() {
                    var d = document,
                        y = (navigator.userAgent.toLowerCase().match(/iPad/i) == "ipad") ? window.pageYOffset : Math.max(d.documentElement.scrollTop, d.body.scrollTop);
                    return d.documentElement.clientHeight + y - n;
                }
                function Load() {
                    var hg = GetHeight();
                    $(container).each(function () {
                        var _s2 = $(this).attr(options.attribute), t = $(this).offset().top;
                        if (_s2 && t < hg && t > hg - 1000) {
                            $(this).attr("src", _s2).removeAttr(options.attribute)
                        };
                    })
                };
                if (!!window.ActiveXObject && !window.XMLHttpRequest)
                { _time = options.time }
                $(window).scroll(function () {
                    clearTimeout(tim);
                    tim = setTimeout(function () { Load(); }, options.time);
                });
            }
        })

复制代码


点击这里查看效果

参数说明

参数container:container表示要遍历的容器,默认是IMG,也就是遍历整个页面的所有IMG。如果想只延时加载某个范围内的图片,可以修改此参数,如我想异步加载面代码中ul中的图片,那么只需要设置参数container的值为".imgContainer li img"即可。

复制代码

<Script type="javascript/text">
    $(function(){
          $.imgLoad({ container: ".imgContainer li img"});
    })
</Script> 
<ul class="imgContainer">
            <li>
                <img src2="X1.JPG" />
            </li>
            <li>
                <img src2="X2.JPG" />
            </li>
            <li>
                <img src2="X3.JPG" />
            </li>
            
        </ul>

复制代码


参数time:参数time表示延时加载的时间,默认是600毫秒,就是说当页面滚动到该范围时0.6秒后该图片就会显示,设置time为1秒:

<Script type="javascript/text">
$(function(){
     $.imgLoad({"time":1000 });
})
</Script>

参数attribute:此参数为存储图片路径的参数,在图片设置SRC属性之前,要把真实的图片路径存在某个属性里,默认为SRC2,可以把此属性设置为任意:

复制代码

<Script type="javascript/text">
    $(function(){
        $.imgLoad({ attribute: "myAttr"});
    })
</Script>
<body>
     <img myAttr="1.jpg"/>
</body>

复制代码


基本参数已经讲完了,关于调用也是相当简单的。这里还有一个问题,由于延时加载的方法是写在页面滚动的事件里,也就是代码中的

 $(window).scroll(function () {
                    clearTimeout(tim);
                    tim = setTimeout(function () { Load(); }, options.time);
                });


那么如果直接刷新页面浏览器会直接跳到当前停留的位置,但是有的浏览器没有触发scroll事件,这种情况下的解决办法在页面加载完成后使用scrollTop方法,让浏览器向上1个像素:

jQuery(window).scrollTop(1)


这样这个插件就讲完了,相对于网上的一些插件应该算是简单实用的了,欢迎大家踊跃讨论。