网页前端优化之滚动延时加载图片示例

 更新时间:2013年07月13日 09:52:40   作者:  
做web开发的朋友都应该掌握前端优化这个技巧,其中一个就是滚动延时加载。这个技巧应用在了很多地方,比如新浪微博网页版。以下就为大家详细介绍,需要的朋友可以参考下

为什么要延时加载呢?页面加载的时候就显示全部的图片不就得了?有必要多此一举吗?答案是肯定的。当要加载的图片或者内容很多时,如果一次性加载完毕,那么整个页面将会加载很久,意味着要用户等待很久,这是对用户不友好的。或许你还会问,那不就做个分页不就得了?其实这种滚动延时加载的技巧正是用来代替手动点击下一页的分页技术。每换一页都要用户点击一次,这也是对用户不友好的。所以才有了滚动延时加载。

我这里把加载图片作为例子,就好像百度图片里的一样,你往下滚动,它就会继续显示下一页的图片。

要求是这样的,比如我要加载20张图片,在页面加载完毕后我先加载5张(前提是5张已经占满浏览器窗口高度),当滚动条滚动到浏览器底部的时候再加载5张,一共加载4次。

原理是这样的,先获取当前浏览器的窗口高度a,然后给页面绑定一个滚动条滚动事件,当滚动条滚动的时候,首先判断时候已经加载了20张,如果小于20张,再获取当前文档距离顶部的高度b以及图片内容的高度c,如果a+b>=c,继续加载5张图片。

我说过,我喜欢以尽可能少的代码以及尽可能简单的demo来为有需要的人展示一些强大的功能,因为所有的东西原理其实都很简单,越简单的demo越容易让人理解和接受。所以代码很少,直接上代码:

复制代码 代码如下:

<!DOCTYPE html>
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
    <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
    <title>页面滚动延迟加载图片</title>
    <style type="text/css">
        body {
            margin: 0px;
        }
        ul {
            list-style: none;
            margin: 0px;
            padding: 0px;
        }
    </style>
    <script type="text/javascript" src="jquery-1.7.2.min.js"></script>
    <script type="text/javascript">
        var n = 0;
        var winHeight = $(window).height();
        $(function () {
            loadimg();
            $(window).scroll(function () {
                if (n < 20) {
                    var docTop = $(document).scrollTop();
                    var contentHeight = $("#content").height();
                    if (docTop + winHeight >= contentHeight - 10) {
                        loadimg();
                    }
                }
            });
        });
        function loadimg() {
            for (i = 0; i < 5; i++) {
                $("#content").append("<li><img src='1.jpg'/></li>");
            }
            n += 5;
        }
    </script>
</head>
<body>
    <ul id="content">
    </ul>
</body>
</html>

这里使用了jqury框架是为了让代码更少更简单,如果你可以手写纯js代码来实现这个功能当然最好不过,毕竟是优化,这个小小的功能也不需要使用到任何js框架。不过个人比较喜欢jquery框架,毕竟在大项目中,手写纯js代码将会严重拖慢整个项目的进度,有一个强大的js框架摆在面前,合理运用还是能提高开发效率的,而且在一个大项目中,jquery不是仅仅能帮你实现这个小小的功能而已,像Ajax,它是能轻轻松松就能帮你搞定的。另外我这里只是写死了加载这一张图片,事实上它应该是使用Ajax来请求新的图片,然后加载到页面里的,因为想尽量简单,就没有涉及后台逻辑,所以只加载这一张图片。

你可能会注意到这句代码:docTop + winHeight >= contentHeight - 10,这里我为什么要-10呢?如果不-10在IE、Firefox下测试时通过的,但是在Chrome下就不行了,因为在Chrome下,docTop + winHeight是永远比contentHeight小1的,而在前两个浏览器里,docTop + winHeight是比contentHeight大1的,这个是浏览器的问题,我们只能去兼容它们,最简单的方法就是不一定要滚动到底部,滚动到距离底部还有10个像素的时候就可以加载新的图片了。

需要源工程代码?

相关文章

  • jquery对标签添加只读(readonly)或者禁用(disabled)属性

    jquery对标签添加只读(readonly)或者禁用(disabled)属性

    这篇文章主要介绍了jquery对标签添加只读(readonly)或者禁用(disabled)属性,jQuery是一个JavaScript库。极大地简化了JavaScript编程,下面关于其详细介绍,需要的小伙伴可以参考一下
    2022-03-03
  • jQuery EasyUI 入门必看

    jQuery EasyUI 入门必看

    下面小编就为大家带来一篇jQuery EasyUI 入门必看。小编觉得挺不错的,现在就分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2016-06-06
  • 实例详解jQuery的无new构建

    实例详解jQuery的无new构建

    这篇文章运用实例介绍了jQuery的无new构建,小编感觉介绍的非常详细,具有参考借鉴价值,感兴趣的朋友一起学习吧。
    2016-08-08
  • cookie.js 加载顺序问题怎么才有效

    cookie.js 加载顺序问题怎么才有效

    在使用cookie.js时,只有在jquery.js文件后加载整体才有效,下面与大家分享下有效加载顺序,有此需求的朋友可以参考下
    2013-07-07
  • jQuery的操作属性你真的了解吗

    jQuery的操作属性你真的了解吗

    这篇文章主要为大家详细介绍了jQuery的操作属性,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下,希望能够给你带来帮助
    2022-02-02
  • 自定义刻度jQuery进度条及插件

    自定义刻度jQuery进度条及插件

    自定义刻度jq进度条可以自定义进度条刻度圆点数量,大小等相关属性,可以通过css控制圆点的外观样式,通过progressdots插件自定义刻度动画,使用该插件还需引入jquery,jquery.progressdots.js和jquery.progressdots.css文件。需要的朋友一起学习吧
    2015-09-09
  • jQuery实现每隔几条元素增加1条线的方法

    jQuery实现每隔几条元素增加1条线的方法

    这篇文章主要介绍了jQuery实现每隔几条元素增加1条线的方法,可实现每隔10条li元素增加一条虚线的功能,涉及jQuery元素的匹配与属性动态设置技巧,需要的朋友可以参考下
    2016-06-06
  • jquery弹出关闭遮罩层实例

    jquery弹出关闭遮罩层实例

    这篇文章介绍了jquery弹出关闭遮罩层实例,有需要的朋友可以参考一下
    2013-08-08
  • Javascript 链式调用实现代码(参考jquery)

    Javascript 链式调用实现代码(参考jquery)

    谓的链式调用无非是一个语法技巧而已,我就学Jquery写了一个粗浅的库。
    2010-05-05
  • 利用jQuery实现可以编辑的表格

    利用jQuery实现可以编辑的表格

    在前台的表格中单击单元格便可修改其中的内容,回车键保存修改的内容,esc撤销保存的内容
    2014-05-05

最新评论