网上查了很多图片懒加载的内容, 但基本上都是jQuery实现的, 没有说清楚其原理, 所以研究了一下

多的不说, 上代码, 看不明白的建议看下我的上一篇文章<1. 图解浏览器和用户设备的宽高等属性>

HTML部分(图片地址自己随意)

<div>
<img data-src="1.jpg" src="0.gif" alt="">
<img data-src="1.jpg" src="0.gif" alt="">
<img data-src="1.jpg" src="0.gif" alt="">
<img data-src="1.jpg" src="0.gif" alt="">
<img data-src="1.jpg" src="0.gif" alt="">
<img data-src="1.jpg" src="0.gif" alt="">
<img data-src="1.jpg" src="0.gif" alt="">
<img data-src="1.jpg" src="0.gif" alt="">
<img data-src="1.jpg" src="0.gif" alt="">
<img data-src="1.jpg" src="0.gif" alt="">
<img data-src="1.jpg" src="0.gif" alt="">
<img data-src="1.jpg" src="0.gif" alt="">
<img data-src="1.jpg" src="0.gif" alt="">
<img data-src="1.jpg" src="0.gif" alt="">
<img data-src="1.jpg" src="0.gif" alt="">
<img data-src="1.jpg" src="0.gif" alt="">
<img data-src="1.jpg" src="0.gif" alt="">
<img data-src="1.jpg" src="0.gif" alt="">
<img data-src="1.jpg" src="0.gif" alt="">
<img data-src="1.jpg" src="0.gif" alt="">
<img data-src="1.jpg" src="0.gif" alt="">
<img data-src="1.jpg" src="0.gif" alt="">
</div>

JS部分

/*
思路 1.先将图片地址存在"data-src"中
2.图片出现在页面中就将"src"的地址改变
重点 判断图片是否出现在页面中
1.图片距离页面顶部的高度 + 屏幕高度
2.页面距离顶部被卷起来的高度
*/
//可操作部分(建议使用前测试)
var m = 500; //值越大顶部加载的越多
var n = 0; //值越大加载的越多 //选定img元素
var imgs = document.getElementsByTagName("img");
//判断浏览器的高度
var win_h = window.innerHeight||document.documentElement.clientHeight;
//更换图片
function replace(num){
//不能直接将img的"src"等于"data-src",所以先获取"data-src"的值,然后再添加给"src"
imgs[num].setAttribute("src", imgs[num].getAttribute("data-src"));
} //页面滚动时判断滚动到位置(出现在视图窗口),进行加载
window.onscroll = function(){
//页面被卷起来的部分的高度
var scroll_top = window.pageYOffset;
//图片距离页面顶部的高度
for (var i = 0; i < imgs.length; i++) {
var c = imgs[i].offsetTop;
//当图片刚好在可视窗口之内时,替换内容
if (c > (scroll_top - m) && c < (scroll_top + win_h - n)) {
replace(i);
}
}
}
//开始页面就要加载一部分图片
window.onscroll();

虽然比较啰嗦, 但是内容详细. 希望能帮到大家

最终效果如下:

2.原生js实现图片懒加载的更多相关文章

  1. 页面性能优化-原生JS实现图片懒加载

    在项目开发中,我们往往会遇到一个页面需要加载很多图片的情况.我们可以一次性加载全部的图片,但是考虑到用户有可能只浏览部分图片.所以我们需要对图片加载进行优化,只加载浏览器窗口内的图片,当用户滚动时,再 ...

  2. 原生js实现图片懒加载+加入节流

    这两天在学习图片的懒加载实现,看了很多大佬的博客,终于有了点成果.现在用了其中一位大佬的文章中的代码实现了图片懒加载并且在其基础上加入了节流函数. 原理就不多讲了,有需要的可以去大佬的文章看看.大佬文 ...

  3. js插件---图片懒加载echo.js结合 Amaze UI ScrollSpy 使用

    js插件---图片懒加载echo.js结合 Amaze UI ScrollSpy 使用 一.总结 一句话总结:图片懒加载echo.js结合 Amaze UI ScrollSpy 使用的效果就是:懒加载 ...

  4. js插件---图片懒加载lazyload

    js插件---图片懒加载lazyload 一.总结 一句话总结:使用异常简单,src里面放加载的图片,data-original里面放原图片,不懂的位置去官网或者github找API就好. 1.laz ...

  5. JS实现图片懒加载插件

    一.前言 我在前几篇博客的记录中,有说自己在做一个图片懒加载的功能,然后巴拉巴拉的遇到哪些问题,结果做完了也没对懒加载这个功能做一些记录,所以这篇文章主要针对我所实现的思路,以及代码做个记录,实现不佳 ...

  6. js, javascript 图片懒加载 实例代码

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

  7. js实现图片懒加载

    大型购物网站都会采用图片懒加载技术来优化网站首页打开速度,以提高用户体验,那么具体是怎么实现的呢,我们一探究竟. html结构(div包裹一层用来显示背景图片,等待图片加载完成后,显示真实图片) &l ...

  8. Js 之图片懒加载插件

    一.PC端(lazyload) 1.引入js文件 <script src="//ajax.googleapis.com/ajax/libs/jquery/1.10.2/jquery.m ...

  9. js实现图片懒加载原理

    原理 图片懒加载是前端页面优化的一种方式,在页面中有很多图片的时候,图片加载就需要很多时间,很耗费服务器性能,不仅影响渲染速度还会浪费带宽,为了解决这个问题,提高用户体验,所以就出现了懒加载这种方式来 ...

随机推荐

  1. 用BAPI_ACC_DOCUMENT_POST过账生成凭证

    根据前台需要输入参数,在bapi里面传值,不同业务所需参数不同. dome1: "bapi结构赋值     LOOP AT lt_item INTO lw_item.       wa_do ...

  2. 干货,Wireshark使用技巧-过滤规则

    - 过滤规则使用 在抓取报文时使用的规则,称为过滤规则,Wireshark底层是基于Winpcap,因此过滤规则是Winpcap定义的规则,设置过滤规则后,抓到的报文仅包含符合规则的报文,其它报文则被 ...

  3. iOS滑动手势UIPanGestureRecognizer 注意事项

    今天在做侧滑页面时,发现页面随着滑动手势而滑动,到临界点时,如果再滑动会出现抖动现象.找到解决办法是进入方法后先判断一次,再判断是在滑动范围内让页面滑动.遂将滑动手势(UIPanGestureReco ...

  4. nRF24L01+启用自动应答ACK及自动重发的实战分享

    ACK模式(自动应答)功能的官方说明 当用W_TX_PAYLOAD命令对发送端TX FIFO写数据时,将数据打包后,数据包中包控制字段NO_ACK 标志位复位.接收端接收到一帧有效数据后, 产生RX_ ...

  5. MYSQL第一课

    rm-rf /* 不能用 完全删除 数据库不能直接存储数据 table 表 DB 数据库 DBMS 数据库操作系统 SQL 结构化查询语言 语句不区分大小写,但字符串常量区区分大小写.建议命令大写. ...

  6. win10查看桌面壁纸路径

    如题,win10查看自己壁纸的缓存路径,就是找到壁纸的原图:在explorer里输入 %USERPROFILE%\AppData\Roaming\Microsoft\Windows\Themes 1 ...

  7. 父组件调用子组件中的方法- this.$refs.xxx.子组件方法();

    子组件中有一个说的方法 在父组件中去调用当你点击的时候 去调用子组件中的方法 fu.vue 在父组件的方法中调用子组件的方法,很重要 this.$refs.mychild.parentHandlecl ...

  8. 字典与json转化

    json.dumps(字典)  #转成json格式 json.loads(json格式) #转成字典格式

  9. SpringCloud学习笔记(一、SpringCloud 基础)

    目录: 概述 观察者模式 代理模式 概述: spring系列中使用了大量的设计模式,而最常见的便是这观察者.代理模式,所以在讲解SpringCloud之前我们先学习下这两个最常见的设计模式. 观察者模 ...

  10. Python自动化运维之高级函数

    本帖最后由 陈泽 于 2018-6-20 17:31 编辑 一.协程 1.1协程的概念 协程,又称微线程,纤程.英文名Coroutine.一句话说明什么是线程:协程是一种用户态的轻量级线程.(其实并没 ...