zoukankan      html  css  js  c++  java
  • javascript

    最近在看一本书《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中定义的图片。

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

  • 相关阅读:
    Schema和数据类型优化?
    语雀发布博客园
    为知笔记文章目录
    码云搭建博客
    springboot的过滤器、监听器、拦截器
    springboot常用注解
    springboot使用小技巧合集
    springboot整合swagger2
    强制卸载win软件
    xshell下载和优化配置
  • 原文地址:https://www.cnblogs.com/huangjacky/p/4025489.html
Copyright © 2011-2022 走看看