JS实现非首屏图片延迟加载的示例

目标

减少资源加载可以明显的优化页面加载的速度,所以可以减少页面载入时立即下载的图片的数量,以提高页面加载速度,其他的图片在需要的时候再进行加载。

思路

想要实现以上的目标,有几个地方需要思考。

1、如何判断哪些图片需要立即加载,哪些可以晚些再加载?

2、如何控制图片在指定的时候加载?

对于第一个问题,页面打开就会被用户看到的图片肯定需要立即加载,其他的可以延后。即在视窗中的图片需要立即加载。那么如何判断图片是否在视窗内呢?getBoundingClientRect可以返回元素的大小及其相对于视口的位置(

 

可以通过图中top和right的值判断图片是否在视窗中。

对于第二个问题,先不给img指定src,而是将图片链接地址存放再元素的data-src属性(自定义)中,需要加载的时候再赋值给src,才会开始下载图片。

实现

思路有了,我们开始实现。用以下HTML进行测试

<div class="container">

图片懒加载

测试性配文,测试图片懒加载

测试性配文,测试图片懒加载

测试性配文,测试图片懒加载

测试性配文,测试图片懒加载

测试性配文,测试图片懒加载

测试性配文,测试图片懒加载

测试性配文,测试图片懒加载

测试性配文,测试图片懒加载

测试性配文,测试图片懒加载

测试性配文,测试图片懒加载

测试性配文,测试图片懒加载

测试性配文,测试图片懒加载

测试性配文,测试图片懒加载

测试性配文,测试图片懒加载

测试性配文,测试图片懒加载

测试性配文,测试图片懒加载

测试性配文,测试图片懒加载

测试性配文,测试图片懒加载

测试性配文,测试图片懒加载

测试性配文,测试图片懒加载

测试性配文,测试图片懒加载

测试性配文,测试图片懒加载

测试性配文,测试图片懒加载

测试性配文,测试图片懒加载

测试性配文,测试图片懒加载

测试性配文,测试图片懒加载

测试性配文,测试图片懒加载

测试性配文,测试图片懒加载

测试性配文,测试图片懒加载

测试性配文,测试图片懒加载

测试性配文,测试图片懒加载

测试性配文,测试图片懒加载

测试性配文,测试图片懒加载

测试性配文,测试图片懒加载

测试性配文,测试图片懒加载

测试性配文,测试图片懒加载

测试性配文,测试图片懒加载

测试性配文,测试图片懒加载

测试性配文,测试图片懒加载

测试性配文,测试图片懒加载

测试性配文,测试图片懒加载

测试性配文,测试图片懒加载

测试性配文,测试图片懒加载

测试性配文,测试图片懒加载

测试性配文,测试图片懒加载

测试性配文,测试图片懒加载

测试性配文,测试图片懒加载

测试性配文,测试图片懒加载

html中链接都来自百度图片,可在network中观察是否加载,这里忽略样式。按照之前的思路,有以下代码

下面就是如何实现lazyLoad

0) { element.setAttribute('src',element.getAttribute('data-src')) } }) }

通过window.innerHeight获取到视窗的高度,当元素距离视窗上边沿为offset时,加载图片;其中offset为指定的偏移距离。

节流函数如下

return function () {
let context = this
let args = arguments
let curTime = new Date()

clearTimeout(timer)
if (curTime - startTime >= atleast) {
fn.apply(context,args) // apply 指定函数指向的 上下文(this) 和 参数列表
startTime = curTime
} else {
timer = setTimeout(function () {
fn.apply(context,args)
startTime = curTime
},delay)
}
}
}

效果

页面载入完成,只加载了一张图片

向下滚动到指定位置,才会依次加载后续图片

以上这篇JS实现非首屏图片延迟加载的示例就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持编程之家。

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐


kindeditor4.x代码高亮功能默认使用的是prettify插件,prettify是Google提供的一款源代码语法高亮着色器,它提供一种简单的形式来着色HTML页面上的程序代码,实现方式如下: 首先在编辑器里面插入javascript代码: 确定后会在编辑器插入这样的代码: <pre
这一篇我将介绍如何让kindeditor4.x整合SyntaxHighlighter代码高亮,因为SyntaxHighlighter的应用非常广泛,所以将kindeditor默认的prettify替换为SyntaxHighlighter代码高亮插件 上一篇“让kindeditor显示高亮代码”中已经
js如何实现弹出form提交表单?(图文+视频)
js怎么获取复选框选中的值
js如何实现倒计时跳转页面
如何用js控制图片放大缩小
JS怎么获取当前时间戳
JS如何判断对象是否为数组
JS怎么获取图片当前宽高
JS对象如何转为json格式字符串
JS怎么获取图片原始宽高
怎么在click事件中调用多个js函数
js如何往数组中添加新元素
js如何拆分字符串
JS怎么对数组内元素进行求和
JS如何判断屏幕大小
js怎么解析json数据
js如何实时获取浏览器窗口大小
原生JS实现别踩白块小游戏(五)
原生JS实现别踩白块小游戏(一)