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

兼容性:兼容目前流行的全部浏览器,包括:兼容到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. CentOS 安装

    选择选择启动介质 Install or upgrade an existing system: 安装或升级现有的系统 install system with basic video driver: 安 ...

  2. Maven下载安装

    1.maven下载地址 https://maven.apache.org/配置:M2_HOME D:\tool\mvn\apache-maven-3.3.9 PATH %M2_HOME%/bin3.命 ...

  3. HTML DOM insertBefore() 方法 使用的时候发现一个问题,记录下

    在W3C中是这样定义的   第二个参数是可先的,但是在谷歌浏览器和火狐浏览器中测试是会有bug的,第二个参数是必填的,否则会报错 感兴趣的可以测试 以下是我测试的结果: 谷歌浏览器:Uncaught ...

  4. BizTalk动手实验(十二)WCF-Oracle适配器使用

    1 课程简介 通过本课程熟悉WCF-Oracle适配器的的使用 2 准备工作 1. 新建BizTalk空项目 2. 配置BizTalk项目的应用程序名称及程序签名. 3. Oracle数据库 ( Or ...

  5. BizTalk开发系列(二十) 类型作用域

    Orchestration中的Type概念跟.NET 里的Class一样,可以在Orchestration开过过程中将多个实例绑定到一种类型.Orchestration 视图里包括的类型有Port T ...

  6. 省略号 对单行 多行的css

    .twoline{ display: -webkit-box !important;; overflow:hidden; text-overflow: ellipsis; word-break: br ...

  7. SQL基础巩固1

    直接开门见山------F4 1.查询 对指定的数据表或是视图进行检索查询,找出符合查询条件功能,具体包括以下SQL语法如下所示,其中[]为可选项 Select<列名> From<表 ...

  8. iOS开发网络篇—简单介绍ASI框架的使用

    iOS开发网络篇—简单介绍ASI框架的使用 说明:本文主要介绍网络编程中常用框架ASI的简单使用. 一.ASI简单介绍 ASI:全称是ASIHTTPRequest,外号“HTTP终结者”,功能十分强大 ...

  9. 手动启动mongodb和nodejs程序

    最近做单片机去了,以前用的mongodb和nodejs没有配置成服务,居然忘了如何手动启动.在此记录下 一.手动启动mongodb 1.进入cmd 2.在dos下打开mongodb路径E:\mongo ...

  10. JS小数点加减乘除运算后位数增加的解决方案

    /** * 加法运算,避免数据相加小数点后产生多位数和计算精度损失. * * @param num1加数1 | num2加数2 */ function numAdd(num1, num2) { var ...