zoukankan      html  css  js  c++  java
  • 移动端 延迟加载echo.js的使用

    浏览器支持ie8+
     
    <img src="img/blank.gif" alt="" data-echo="img/album-1.jpg">
     
     
    <script>
    window.echo = (function (window, document) {
     
      'use strict';
     
      /*
       * Constructor function
       */
      var Echo = function (elem) {
        this.elem = elem;
        this.render();
        this.listen();
      };
     
      /*
       * Images for echoing
       */
      var echoStore = [];
       
      /*
       * Element in viewport logic
       */
      var scrolledIntoView = function (element) {
        var coords = element.getBoundingClientRect();
        return ((coords.top >= 0 && coords.left >= 0 && coords.top) <= (window.innerHeight || document.documentElement.clientHeight));
      };
     
      /*
       * Changing src attr logic
       */
      var echoSrc = function (img, callback) {
        img.src = img.getAttribute('data-echo');
        if (callback) {
          callback();
        }
      };
     
      /*
       * Remove loaded item from array
       */
      var removeEcho = function (element, index) {
        if (echoStore.indexOf(element) !== -1) {
          echoStore.splice(index, 1);
        }
      };
     
      /*
       * Echo the images and callbacks
       */
      var echoImages = function () {
        for (var i = 0; i < echoStore.length; i++) {
          var self = echoStore[i];
          if (scrolledIntoView(self)) {
            echoSrc(self, removeEcho(self, i));
          }
    	  
    		  //if (scrolledIntoView(self)) {
    //			echoSrc(self, removeEcho(self, i));
    //			continue;
    //			}
    //			
    //			i++;
    //			}
    //if i == 0 and image echoStore[0] is now in the view, than handler it. After splice(i, 1); the next image u got to check is still echoStore[0], but the next loop check from 1 (i=1).and this cuz the following puzzle that some guys menstioned.
        }
      };
     
      /*
       * Prototypal setup
       */
      Echo.prototype = {
        init : function () {
          echoStore.push(this.elem);
        },
        render : function () {
          if (document.addEventListener) {
            document.addEventListener('DOMContentLoaded', echoImages, false);
          } else {
            window.onload = echoImages;
          }
        },
        listen : function () {
          window.onscroll = echoImages;
        }
      };
     
      /*
       * Initiate the plugin
       */
      var lazyImgs = document.querySelectorAll('img[data-echo]');
      for (var i = 0; i < lazyImgs.length; i++) {
        new Echo(lazyImgs[i]).init();
      }
      
    //  [].forEach.call(document.querySelectorAll('img[data-echo]'), function (img) {
    //  new Echo(img).init();
    //}
     
    })(window, document);
    </script>
     
     
     

    使用的方法

    <script>
    Echo.init({

    offset: 1100,  //距离可视区
    throttle: 50  //延迟时间


      });
    </script>

  • 相关阅读:
    Spring set注入
    Spring 搭建
    MyBatis 动态Sql
    Mybatis 数据读取
    MyBatis 搭建
    第三十二章:Map集合
    第三十一章:集合输出
    第三十章:Set集合
    第二十八、九章:类集框架简介、List集合
    第25、26、27章:类加载器、反射与代理设计模式、反射与Annotation
  • 原文地址:https://www.cnblogs.com/surfaces/p/4497361.html
Copyright © 2011-2022 走看看