javascript - 简单实现一个图片延迟加载的jQuery插件

最近在看一本书《Third-Party Javascript》很不错,推荐给大家,下载地址各位自己搜索了。
步骤:

1.打开google,鉴于google基本打不开,那么就打开这个网址吧。http://www.aol.com
2.搜索third party javascript filetype:pdf 一般都可以下载到电子书了。目前只有英文版。

这书中有一章讲到了提高app的效率,其中有一点就是延迟加载初始化不需要的资源,结合书中给出的部分代码,我这里简单的弄了一个jQuery的插件。
首先是js代码jquery.lazyloading.js。

 1 /**
 2  * @author huangjacky
 3  * @date 2014-10-14
 4  * @version 1.0
 5  * @email huangjacky@163.com
 6  * @description
 7  */
 8 'use strict';
 9 (function ($) {
10     $.fn.extend({
11         lazyloading: function (opt) {
12             var defaults = {
13                 delay: 0
14             };
15             var self = this;
16             var options = $.extend(defaults, opt);
17             var getWindowInfo = function () {
18                 if ("pageYOffset" in window) {
19                     return {
20                         x: window.pageXOffset,
21                         y: window.pageYOffset,
22                         w: window.innerWidth,
23                         h: window.innerHeight
24                     }
25                 } else {
26                     var el = document.documentElement;
27                     return {
28                         x: el.scrollLeft,
29                         y: el.scrollTop,
30                         w: el.clientWidth,
31                         h: el.clientHeight
32                     }
33                 }
34 
35             };
36             var check = function () {
37                 var t = getWindowInfo();
38                 self.each(function (idx) {
39                     var $this = $(this);
40                     var left = 0;
41                     var top = 0;
42                     var el = this;
43                     while (el && el.offsetParent) {
44                         left += el.offsetLeft;
45                         top += el.offsetTop;
46                         el = el.offsetParent;
47                     }
48                     if (
49                         left > t.x && left < t.x + t.w &&
50                         top > t.y && top < t.y + t.h
51                         ) {//开始正式加载
52                         var href = $this.data("href");
53                         if ($this.is("img")) {
54                             if (options.delay > 0) {
55                                 setTimeout(function () {
56                                     $this.attr("src", href);
57                                 }, options.delay);
58                             } else {
59                                 $this.attr("src", href);
60                             }
61                         } else if ($this.is("div")) {
62                             if (options.delay > 0) {
63                                 setTimeout(function () {
64                                     $this.load(href);
65                                 }, options.delay);
66                             } else {
67                                 $this.load(href);
68                             }
69                         }
70                     }
71                 });
72             };
73             $(window).on("scroll", function (evt) {
74                 check();
75             });
76             check();
77         }
78     });
79 })(jQuery);

JS的代码并不难,主要是绑定window的onScroll事件,然后遍历判断所选择的元素是否在界面范围内。

接下来看看怎么使用,lazy.html的代码如下:

 1 <!DOCTYPE html>
 2 <html>
 3 <head lang="en">
 4     <meta charset="UTF-8">
 5     <title></title>
 6     <script src="js/jquery-2.1.0.js"></script>
 7     <script src="js/jquery.lazyloading.js"></script>
 8     <style>
 9         .my-block {
10             height: 500px;
11             width: 100%;
12         }
13 
14         .red {
15             background-color: red;
16         }
17 
18         .blue {
19             background-color: blue;
20         }
21 
22         img {
23             width: 100px;
24             height: 100px;
25             border: 1px solid red;
26         }
27     </style>
28 </head>
29 <body>
30 <div class="my-block red"></div>
31 <div class="my-block blue"></div>
32 <div class="my-block red"></div>
33 <img src="#" data-href="images/logo.png">
34 <script>
35     $("img").lazyloading();
36 </script>
37 </body>
38 </html>

是不是很简单?这样图片默认显示src的内容,只有滚动到它的时候才会显示data-href中定义的图片。

代码中还有很多逻辑没有实现,各位见谅。

posted @ 2014-10-15 00:20  HuangJacky  阅读(670)  评论(1编辑  收藏  举报
AdminLogin