图片懒加载(图片出现在可视区域再加载)

兼容性:兼容目前流行的全部浏览器,包括:兼容到IE6)

使用方法:

  • 引入相应的js文件
    <script src="js/lazy.js"></script>

  • 初始化

Lazy.init(1000);
可以传入延时时间。默认是500ms

注意:

<img src="img/load.gif" data-lazy="img/2.jpg">

src 属性放预加载的图片,data-lazy放实际展示的图片

githut:https://github.com/chenjinxinlove/lazy

   /**
* 兼容ie678不支持bind()办法
* */
if (!function() {}.bind) {
Function.prototype.bind = function(context) {
var self = this
, args = Array.prototype.slice.call(arguments); return function() {
return self.apply(context, args.slice(1));
}
};
} (function () {
var Lazy = function () { };
var _imgs = [],
_num = 0;
/**
* 得到元素相当于窗口的高度
* @param _e 出入元素
* @returns {_number} 返回高度
*/ Lazy.prototype._getEleViewHeight = function (_e) {
if(_e){
var _top = _e.offsetTop,
_c = _e.offsetParent;
while (_c !== null){
_top += _c.offsetTop;
_c = _c.offsetParent;
}
if( typeof window.pageYOffset !== 'undefined'){
return _top - window.pageYOffset;
}
else if(typeof document.compatMode !== 'undefined' && document.compatMode !== "BackCopt"){
return _top - document.documentElement.scrollTop;
}
else{
return _top - document.body.scrollTop;
}
} };
/**
* 得到浏览内窗口高度
* @returns {number}
* @private
*/
Lazy.prototype._getViewHeight = function () {
var _viewHeight = 0;
if( typeof window.innerHeight !== 'undefined' ){
_viewHeight = window.innerHeight;
}
else if(typeof document.compatMode !== 'undefined' && document.compatMode !== "BackCompt"){
_viewHeight = document.documentElement.clientHeight;
}
else{
_viewHeight = document.body.clientHeight;
}
return _viewHeight;
}; Lazy.prototype._getImg = function () {
var _i = document.getElementsByTagName("img");
for(var i = 0, len = _i.length; i < len; i++){
if(typeof (_i[i].getAttribute("data-lazy"))){
_imgs.push(_i[i]);
_num++;
}
}
}; /**
* 导入图片
* @private
*/
Lazy.prototype._loadImg = function () {
if(!_num)return;
var _viewHeihgt = this._getViewHeight();
for(var i = 0, len = _imgs.length; i < len; i++){
var _imgEle = _imgs[i];
if(this._getEleViewHeight(_imgEle) < _viewHeihgt){
_imgEle.src =_imgEle.getAttribute("data-lazy");
delete _imgs[i];
_num--;
}
}
}; /**
* 初始化,可以设置延时
*/
Lazy.prototype.init = function (time) {
this._getImg();
var _time = time || 500;
window.onscroll = window.onload = function () {
setTimeout(function () {
this._loadImg();
}.bind(this),_time);
}.bind(this); } window.Lazy = new Lazy(); })();

  

js 图片懒加载的更多相关文章

  1. JS图片懒加载

    简介 当页面图片太多时,加载速度就会很慢.尤其是用2G/3G/4G访问页面,不仅页面慢,而且还会用掉很多流量.图片懒加载的原理就是将页面内所有需要加载的图片全部换成一张默认的图片(一般尺寸很小),只有 ...

  2. 【前端优化】js图片懒加载及优化

    一.前言 为啥要对图片使用懒加载?我们首先来聊聊这个问题,对于页面来说架子啊速度影响着最大的就是图片,一张普通的图片可以达到4-5M的大小,而代码压缩也就只有几十KB.当页面图片过多的时候,页面加载速 ...

  3. js图片懒加载(滚动加载)是否生效

    一.什么是懒加载? 对未出现在视野范围内的图片先不进行加载,等到出现在视野范围才去加载. 二.为什么使用懒加载? 懒加载的主要目的是作为服务器前端的优化,减少请求数或延迟请求数. 理论性知识大家都有自 ...

  4. js图片懒加载(滚动加载)判断是否生效

    一.什么是懒加载? 对未出现在视野范围内的图片先不进行加载,等到出现在视野范围才去加载. 二.为什么使用懒加载? 懒加载的主要目的是作为服务器前端的优化,减少请求数或延迟请求数. 理论性知识大家都有自 ...

  5. web性能优化之js图片懒加载

    html <div class="container"> <ul> <li> <div id="first" clas ...

  6. js——图片懒加载

    <img class="js-lazy-image centered" src="./img/dog-running.svg" width="4 ...

  7. 原生js图片懒加载特效

    <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8&quo ...

  8. js原生图片懒加载 或 js原生图片预加载,html标签自定义属性

    使用原声js来实现图片预加载,或图片懒加载,小伙伴们可以根据项目需要来结合vue或者是react来进行修改. 一.什么是图片懒加载或什么是图片预加载 当访问一个页面的时候,先把img元素或是其他元素的 ...

  9. jquery 图片懒加载

      jquery 图片懒加载 CreationTime--2018年7月1日14点45分 Author:Marydon 1.源码展示 (function(a){a.fn.lazyload=functi ...

随机推荐

  1. 服务器租用中网络ping值过高的原因

    其实在网络ping值过程中常常会有很多情况影响这个ping值问题,包括丢包现象,不稳定等等.究竟ping值的大小传输速度与哪些问题有关呢?是什么原因会影响他的速度呢?16年服务器租用运营经验的上市ID ...

  2. 关于使用MVVM模式在WPF的DataGrid控件中实现ComboBox编辑列

    最近在做一个组态软件的项目,有一个需求需要在建立IO设备变量的时候选择变量的类型等. 建立IO变量的界面是一个DataGrid实现的,可以一行一行的新建变量,如下如所示: 这里需要使用带有ComboB ...

  3. 20145337实验四Android开发基础

    20145337实验四Android开发基础 实验内容 基于Android Studio开发简单的Android应用并部署测试; 了解Android组件.布局管理器的使用: 掌握Android中事件处 ...

  4. BizTalk开发系列(十六) XML命名空间

    BizTalk开发过程中如果有对XML进行开发操作,比如在自定义代码里操作XML消息或者在Mapping的时候使用Xpath对XML进行操 作.则有机会遇到XML命名空间的问题.常见的是使用Xpath ...

  5. windows内核 内存管理

    一.几个基本的概念 1.存储器的金字塔结构 存储器从下之上依次是磁盘/flash.DRAM(内存).L2-cache.L1-cache.寄存器,越在上面的存储器访问速度越快,同时价格也越昂贵,每一级都 ...

  6. 【iCore3 双核心板_ uC/OS-III】例程十一:任务消息队列

    实验指导书及代码包下载: http://pan.baidu.com/s/1pLQYiE3 iCore3 购买链接: https://item.taobao.com/item.htm?id=524229 ...

  7. String类中一些的方法的应用

    一.整理string类 1.Length():获取字串长度: 2.charAt():获取指定位置的字符: 3.getChars():获取从指定位置起的子串复制到字符数组中:(它有四个参数) 4.rep ...

  8. Mongo使用脚本更新数据

    SQL Server中我们经常要使用脚本来刷一些数据,在mongo中我们也可以使用mongo的脚本来刷mongo的数据 首先在命令窗口中链接到本地的mongo库 load("[脚本的地址]& ...

  9. JAVA CAS原理

    转自: http://blog.csdn.net/hsuxu/article/details/9467651 CAS CAS: Compare and Swap java.util.concurren ...

  10. Netty5.x中新增和值得注意的点

    最近事情多,OneCoder折腾了好几天,总算翻译完成了. 翻译自官方文档:http://netty.io/wiki/new-and-noteworthy-in-5.x.html   该文档会列出在N ...