如何实现懒加载

2023-11-10

<!--图片地址暂时先保存在data-src这个自定义属性上面-->

<img data-src="./img-loop/img/1.jpg" alt="懒加载1" />

<img data-src="./img-loop/img/2.png" alt="懒加载2" />

<img data-src="./img-loop/img/3.jpg" alt="懒加载3" />

<img data-src="./img-loop/img/4.jpg" alt="懒加载4" />

<img data-src="./img-loop/img/5.jpg" alt="懒加载5" />

<js>

const imgs = document.getElementsByTagName('img');

function lazyLoad(imgs) { // 视口的高度;

const clientH = document.documentElement.clientHeight; // 滚动的距离,这里的逻辑判断是为了做兼容性处理;

const clientT = document.documentElement.scrollTop || document.body.scrollTop;

for(let i = 0; i < imgs.length; i++) {

// 逻辑判断,如果视口高度+滚动距离 > 图片到浏览器顶部的距离就去加载;

// !imgs[i].src 是避免重复请求,可以把该条件取消试试:可以看到不加该条件的话往回滚动就会重复请求;

if(clientH + clientT > imgs[i].offsetTop && !imgs[i].src) {

imgs[i].src = imgs[i].dataset.src;// 使用data-xx的自定义属性可以通过dom元素的dataset.xx取得;

} } };

lazyLoad(imgs); // 一开始能够加载显示在视口中的图片;

window.onscroll = () => lazyLoad(imgs);// 监听滚动事件,加载后面的图片;

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何实现懒加载 的相关文章

  • JavaScript“类”的规范术语[关闭]

    Closed 这个问题是基于意见的 help closed questions 目前不接受答案 这是一个在 JavaScript 中定义 类 创建它的实例并调用它的方法 函数之一的简单示例 Define a class like this
  • 在沙盒中的服务器上运行不受信任的 JavaScript 代码

    我似乎不知道如何设置节点沙箱 它可以安全地运行不受信任的代码 并允许用户通过api调用与程序交互 系统输入和输出 我正在尝试在浏览器中设置一个控制台 以便用户从服务器运行自己的代码 是否有任何节点包支持此功能 或者我是否需要编写自己的节点虚
  • 如何在后台加载图像?

    问题 我正在创建一个专辑 所以每次按 时间 下一个 按钮我正在加载新图像 我想要实现的是 只有在新图像从服务器完全下载后 我才想从旧图像切换到新图像 实际上我不想在加载时显示部分图像 有什么解决办法吗 PS 类似的问题 https stac
  • 应用程序关闭时监听 firebase 数据库更改

    我正在使用 firebase 创建一个 Ionic 2 应用程序 当应用程序关闭时 即在前台 后台和终止 我需要一种方法来侦听数据库更改 特别是在 child added 上 基本上 我想使用 WebRTC 在应用程序内拨打电话 例如 Wh
  • 如何使用鼠标单击选择多个项目?

    This is the default jQueryUI display as a Grid Layouts demo here http jqueryui com demos selectable display grid I can s
  • 减少 JavaScript 中的对象数组

    我在 javascript 中有一个想要减少的对象数组 请参阅下面的代码 6 位或以上的消息已验证 较少的消息未验证 我将他们按组分组 const myArray group groupA message Text without a nu
  • 使用 JS 和 HTML 将当前 URL 插入链接

    所以 我已经阅读了类似的内容 但我仍然找不到更适合我正在做的事情的答案 我正在尝试使用 JS 获取当前页面 URL 并将其附加到社交媒体共享链接 如下所示 a href target blank 使用 Javascript 我成功地将当前
  • 找不到 firebase-messaging.js laravel

    大家好 我正在使用 firebase 制作一个用于推送通知的应用程序 这是我在 firebase 中的第一个项目 我遇到的问题是当我运行项目并单击它给我的登录按钮时的连接 已授予通知权限 但在此之后它返回一个错误 如下所示 获取脚本时收到错
  • JavaScript 函数参数和范围

    我用下面列出的代码做了一些测试 function foo x alert y var y I am defined outside foo definition foo 上面的代码给了我一个警告 我是在 foo 定义之外定义的 然后另一个测
  • 错误:导航器只能包含“屏幕”组件作为其直接子组件

    我是 React Native 新手 收到此错误 但无法解决它 我正在遵循主要的教程反应导航页面 https reactnavigation org docs screen options resolution 但我无法完成它 我将不胜感激
  • 如果只有一个元素发生变化,为什么 AngularJs 会更新数组/哈希映射的所有元素?

    我有一个简单的哈希图和一个以文本形式显示状态的简单方法 但是当我仅更新 1 个用户状态时 所有这些状态都会更新 为所有用户调用函数 有没有一种方法可以只更新一个元素而不是全部 示例代码在这里 只需看看当您单击 更改状态 按钮时控制台中会发生
  • 为什么这些 Javascript for 循环在 Firefox 上比 Chrome / Safari 上慢得多?

    我在搞基准网站jfprefs http jsperf com 并创建了我自己的基准http jsperf com prefix or postfix increment 9 http jsperf com prefix or postfix
  • Cordova - 已弃用尝试访问非导航器对象上的属性“userAgent”

    我正在尝试让我的 Cordova iPhone 应用程序在 iOS 8 1 中运行 在 7 中工作正常 从 8 开始出现以下错误 Deprecated attempt to access property userAgent on a no
  • 调整发散堆积条形图以使用通用更新模式

    我一直在使用可用的堆积条形图示例here https bl ocks org mbostock b5935342c6d21928111928401e2c8608使用以下代码 var data month Q1 2016 apples 384
  • 删除 CSS Transitionend 事件侦听器不起作用

    我在尝试删除 css Transitionend 事件侦听器时遇到问题 我可以添加监听器 e addEventListener transitionend function event transitionComplete event pr
  • 按位非运算符

    为什么要按位运算 0 打印 1 在二进制中 不是0应该是1 为什么 你实际上很接近 在二进制中 不是0应该是1 是的 当我们谈论一位时 这是绝对正确的 然而 一个int其值为0的实际上是32位全零 将所有 32 个 0 反转为 32 个 1
  • 如何从 dataurl 在服务器上创建图像文件

    我有一个 dataurl 格式的图像 例如 data image jpeg base64 9j 4AAQSkZJRgABAQAAAQABAAD 2wBDAAMCAgMCAgMDAwMEAwME iiigAooooAKKKKACiiigAoo
  • 如何使用 jQuery AJAX 和 JSON 通过 Bootbox 确认表单提交

    我正在使用一个网络应用程序工作Spring MVC 我试图在提交表单之前显示一个确认对话框Bootbox 但我收到 500 内部服务器错误 这是我的表格
  • Ruby 数组到 Javascript 数组

    我有一个带有帐户 ID 的 Ruby 数组 我想将帐户 ID 的 Ruby 数组存储在 Javascript 数组中 我想知道最好的方法是什么 另外 当我尝试执行此操作时 Javascript 似乎认为如果只输入一个帐户 ID 则该 ID
  • jQuery 存储类型未定义

    我用了一个jQuery 存储 https ui5 sap com api jQuery sap storage存储数据 oStore jQuery sap storage jQuery sap storage Type local oSto

随机推荐

  • 哈夫曼编码(Huffman Coding)多图详细解析

    哈夫曼编码 哈夫曼编码 又称为霍夫曼编码 它是现代压缩算法的基础 假如我们需要将字符串ABBBCCCCCCCCDDDDDDEE通过二进制编码进行传输 那应该怎么将字符转换为二进制码 方法一 转换为ASCII码 直接将字母转换为对应的ASCI
  • vue【封装 Vue.js 组件库】

    一 组件库有哪些 element iu iview CDD Component Driven Development 自下而上 从组件级别开始 到页面级别结束 CDD 的好处 组件在最大程度被重用 并行开发 可视化测试 二 组件库开发流程
  • git 之 gitlab 私有项目仓库的搭建与使用

    gitlab 私有项目仓库的搭建与使用 一 gitlab简介 二 gitlab安装 三 gitlab使用 一 gitlab简介 GitLab是一个利用 Ruby on Rails 开发的开源应用程序 实现一个自托管的Git项目仓库 可通过W
  • 自用.vimrc文件

    set paste set nocompatible 关闭 vi 兼容模式 syntax on 自动语法高亮 set number 显示行号 set cursorline 突出显示当前行 set ruler 打开状态栏标尺 set shif
  • 机器学习--聚类(12)

    一 基本概念 聚类的概念 一种无监督的学习 事先不知道类别 自动将相似的对象归到同一个簇中 应用场景 文档分类器 客户分类 保险欺诈检测 乘车数据分析 二 距离计算 对于有序距离 其中P 1为曼哈顿距离 P 2为欧氏距离 对于无序距离 使用
  • ASCII码-shellcode的技巧

    网上已经有成熟的工具了 所以就简单记录一下工具怎么用吧 https github com TaQini alpha3 https github com veritas501 ae64 git https github com rcx she
  • Python 集合set添加删除、交集、并集、集合操作符号

    在Python中集合set是基本数据类型的一种 它有可变集合 set 和不可变集合 frozenset 两种 创建集合set 集合set添加 集合删除 交集 并集 差集的操作都是非常实用的方法 1 创建集合 set类是在python的set
  • Prometheus Node_exporter 详解

    Basic CPU Mem Disk Info https www cnblogs com qianyuliang p 10479515 htmlBasic CPU Mem Disk Gauge https www cnblogs com
  • 设计一个类,求圆的周长

    define CRT SECURE ND WARNINGS include
  • 单片机的硬件结构(51单片机的组成)

    文章目录 51单片机的组成 优点 各部件的功能 引脚的功能 1 电源引脚 1 VCC 40脚 5V电源引脚 2 VSS 20脚 数字接地 2 时钟引脚 1 XTAL1 19脚 2 XTAL2 18脚 3 控制引脚 1 RST RESET 9
  • JDBC访问数据库步骤

    目录 一 概念 1 1 JDBC是什么 1 2 JDBC的本质 为什么要面向接口编程 为什么SUN制定一套JDBC接口 二 JDBC编程步骤 2 1 创建maven项目 2 2 添加maven依赖 2 2 1 MySQL依赖 2 2 2 O
  • C语言中怎么使用scanf函数读取空格

    C语言中怎么使用scanf函数读取空格 正则表达式 n 是scanf函数中用于读取字符串的格式说明符之一 它的含义是匹配除换行符 n 以外的所有字符 具体来说 n 会使scanf函数读取输入中的字符 直到遇到换行符为止 它会将匹配到的字符存
  • MySQL服务启动异常:Failed to start MySQL Server. mysqld.service holdoff time over, scheduling restart.

    MySQL服务启动异常 systemctl status mysqld mysqld service MySQL Server Loaded loaded usr lib systemd system mysqld service enab
  • 单链表简单操作

    include
  • 【华为云技术分享】跟唐老师学习云网络 - Kubernetes网络实现

    当今K8s独霸天下之时 咱们站在更高的角度 好好的看看K8s的网络是以什么理念构筑的 以及一个容器集群的好保姆 是如何分别照顾 南北流量和东西流量的 1 简单介绍下Kubernetes 略 容器集群管理的事实标准了 不知道要打屁股 ps 本
  • Doris--基础--07--修改查询超时时间

    Doris 基础 07 修改查询超时时间 1 问题 doris默认最长查询时间为300s 如果仍然未完成 会被cancel掉 2 修改查询超时时间 2 1 查看 查询超时时间 SHOW VARIABLES LIKE query timeou
  • 语句覆盖、条件覆盖、判定覆盖、条件-判定覆盖、路径覆盖

    白盒测试是结构测试 主要对代码的逻辑进行验证 逻辑覆盖率 语句覆盖 lt 条件覆盖 lt 判定覆盖 lt 条件 判定覆盖 lt 组合覆盖 lt 路径覆盖 例子 一 语句覆盖 最基础的覆盖 只要每一个执行处理框内的语句都能执行就可 不用关注判
  • nginx安装部署centos7服务器保姆级教程

    准备工作 1 下载安装包 官网 nginx download 点击连接进入 找到对应的版本 点击下载 这里我选择的是nginx 1 20 2版本的下载 下载之后是nginx 1 20 2 tar gz的压缩包 2 部署安装包 把本地下载好的
  • element el-cascader 级联选择器多选限制级别

    1 html
  • 如何实现懒加载

    img alt 懒加载1 img alt 懒加载2 img alt 懒加载3 img alt 懒加载4 img alt 懒加载5