原生js实现图片懒加载+加入节流
这两天在学习图片的懒加载实现,看了很多大佬的博客,终于有了点成果。现在用了其中一位大佬的文章中的代码实现了图片懒加载并且在其基础上加入了节流函数。
原理就不多讲了,有需要的可以去大佬的文章看看。大佬文章可以从这里进->(https://www.jianshu.com/p/9b30b03f56c2)。
先上HTML结构:
<div></div>
<img src="" id="i1" data-src="data:image1">
<div></div>
<img src="" id="i2" alt="" data-src="data:image2">
然后是样式:
<style>
* {
;
;
}
div {
height: 2000px;
}
#i1 {
display: block;
width: 200px;
height: 200px;
background-color: red;
}
#i2 {
display: block;
width: 200px;
height: 200px;
background-color: green;
}
</style>
最后是JavaScript的代码:
<script>
var lastTime = new Date().getTime();
function lazyLoad() {
//放入节流函数前的准备工作
function preWork() {
//获取页面图片标签
var imgs = document.querySelectorAll("img");
//可视区高度
var h = window.innerHeight || document.documentElement.clientHeight || document.body.clientHeight;
imgs.forEach(function (img) {
//判断data-src属性是否存在,不存在代表图片已经加载过
if (!img.getAttribute('data-src')) {
return;
}
//判断高度差,替换路径后移除data-src属性
if (img.getBoundingClientRect().top < h) {
img.src = img.getAttribute('data-src');
img.removeAttribute('data-src');
}
});
//利用与运算,如果与前面为false,则不运行后面的语句;若为true,继续运行后面的语句。从而达到路径替换完后可以执行移除监听事件的效果
[].every.call(imgs, function (img) {
return !img.getAttribute('data-src');
}) && (window.removeEventListener("scroll", lazyLoad));
}
//节流函数
function throttle() {
var nowTime = new Date().getTime();
if (nowTime - lastTime > 1000) {
preWork();
console.log("节流执行");
lastTime = nowTime;
}
}
//执行节流函数
throttle();
}
window.addEventListener("scroll", lazyLoad);
window.addEventListener("load", lazyLoad);
</script>
js的代码里面加了一些注释,希望能帮助大家理解。
本人是前端小菜鸟一枚,代码里如果出现错误希望大家多多包涵并在评论区提出,本人会认真改正的!
原生js实现图片懒加载+加入节流的更多相关文章
- 页面性能优化-原生JS实现图片懒加载
在项目开发中,我们往往会遇到一个页面需要加载很多图片的情况.我们可以一次性加载全部的图片,但是考虑到用户有可能只浏览部分图片.所以我们需要对图片加载进行优化,只加载浏览器窗口内的图片,当用户滚动时,再 ...
- 2.原生js实现图片懒加载
网上查了很多图片懒加载的内容, 但基本上都是jQuery实现的, 没有说清楚其原理, 所以研究了一下 多的不说, 上代码, 看不明白的建议看下我的上一篇文章<1. 图解浏览器和用户设备的宽高等属 ...
- js插件---图片懒加载echo.js结合 Amaze UI ScrollSpy 使用
js插件---图片懒加载echo.js结合 Amaze UI ScrollSpy 使用 一.总结 一句话总结:图片懒加载echo.js结合 Amaze UI ScrollSpy 使用的效果就是:懒加载 ...
- js插件---图片懒加载lazyload
js插件---图片懒加载lazyload 一.总结 一句话总结:使用异常简单,src里面放加载的图片,data-original里面放原图片,不懂的位置去官网或者github找API就好. 1.laz ...
- JS实现图片懒加载插件
一.前言 我在前几篇博客的记录中,有说自己在做一个图片懒加载的功能,然后巴拉巴拉的遇到哪些问题,结果做完了也没对懒加载这个功能做一些记录,所以这篇文章主要针对我所实现的思路,以及代码做个记录,实现不佳 ...
- js, javascript 图片懒加载 实例代码
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8&quo ...
- js实现图片懒加载
大型购物网站都会采用图片懒加载技术来优化网站首页打开速度,以提高用户体验,那么具体是怎么实现的呢,我们一探究竟. html结构(div包裹一层用来显示背景图片,等待图片加载完成后,显示真实图片) &l ...
- Js 之图片懒加载插件
一.PC端(lazyload) 1.引入js文件 <script src="//ajax.googleapis.com/ajax/libs/jquery/1.10.2/jquery.m ...
- js实现图片懒加载原理
原理 图片懒加载是前端页面优化的一种方式,在页面中有很多图片的时候,图片加载就需要很多时间,很耗费服务器性能,不仅影响渲染速度还会浪费带宽,为了解决这个问题,提高用户体验,所以就出现了懒加载这种方式来 ...
随机推荐
- 2018.9.8 2018NOIP冲刺之配对
普及组第四题难度 主体思路竟然是贪心Q_Q 链接:https://www.nowcoder.com/acm/contest/164/D来源:牛客网 题目描述 小A有n个长度都是L的字符串.这些字符串只 ...
- POJ 3321:Apple Tree + HDU 3887:Counting Offspring(DFS序+树状数组)
http://poj.org/problem?id=3321 http://acm.hdu.edu.cn/showproblem.php?pid=3887 POJ 3321: 题意:给出一棵根节点为1 ...
- Mybatis 一对多分页踩坑 对collection的分析
背景描述: 产品和结算对象(结算名和结算金额)是一对多的关系,使用 collection 做一对多配置.但是出现一对多时,数据没有整合至一起,导致一个产品重复出现. class ResponseVo{ ...
- Linux指令学习
Linux命令格式:命令名 选项 参数 Linux 刚面世时并没有图形界面,所有的操作全靠命令完成,如 磁盘操作.文件存取.目录操作.进程管理.文件权限 设定等,在职场中,大量的服务器维护工作都是 ...
- Java设计模式学习笔记(二) 简单工厂模式
前言 本篇是设计模式学习笔记的其中一篇文章,如对其他模式有兴趣,可从该地址查找设计模式学习笔记汇总地址 正文开始... 1. 简介 简单工厂模式不属于GoF23中设计模式之一,但在软件开发中应用也较为 ...
- 关系型数据库MySql 数据类型与约束
MySql数据库 :数据类型与约束 注意 : 在创建数据表的时候,需要对数据表中的字段设置 数据类型和约束, 便于检测用户输入的数据是否正确有效. 1 数据类型 数据类型的选用原则 : 够用就行,尽 ...
- linux应用程序设计--GCC程序编译
GCC程序编译 linux系统下的GCC(GNU C Compiler)是GNU推出的功能强大.性能优越的多平台编译器,是GNU的代表作之一.GCC可以在多种硬件平台上编译出可执行程序,其执行效率与一 ...
- MyBatis从入门到精通:第一章配置文件log4j.properties
配置文件: #全局配置 log4j.rootLogger=ERROR,stdout #MyBatis日志配置 log4j.logger.tk.mybatis.simple.mapper=TRACE # ...
- python函数知识四 迭代器、生成器
15.迭代器:工具 1.可迭代对象: 官方声明,只要具有__iter__方法的就是可迭代对象 list,dict,str,set,tuple -- 可迭代对象,使用灵活 #方法一: list.__ ...
- python安装及typora使用
第一章 环境搭建 1.1Python安装 1.1.1python官网www.python.org 1.1.2根据电脑系统选择下载 1.1.3确定电脑系统属性,此处我们以win10的64位操作系统为例 ...