移动端 延迟加载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>

你可能感兴趣的:(延迟加载)