首屏优化-图片懒加载的代码实践(可直接运行)

实现图片懒加载时,可以使用 JavaScript 监听滚动事件,并根据图片是否进入可视区域来延迟加载图片。

方案一

<!DOCTYPE html>
<html><head><style>.placeholder {width: 300px;height: 200px;background-color: #ccc;}.image {width: 300px;height: 200px;object-fit: cover;}</style></head><body><h1>Lazy Loading Images Demo</h1><div class="placeholder"></div><!-- 这儿可以讨论 v-for 渲染 --><img class="image" data-src="path/to/image.jpg" alt="Lazy Loaded Image" onerror="handleImageError(this)"><script>// 获取所有具有 data-src 属性的图片元素const images = document.querySelectorAll('img[data-src]');// 监听滚动事件window.addEventListener('scroll', lazyLoad);// 初始化时触发一次懒加载lazyLoad();function lazyLoad() {// 获取视窗的顶部和底部位置const windowHeight = window.innerHeight;const windowTop = window.pageYOffset || document.documentElement.scrollTop;const windowBottom = windowTop + windowHeight;// 遍历每个具有 data-src 属性的图片元素images.forEach((img) => {// 判断图片是否进入视窗const imgTop = img.offsetTop;const imgBottom = imgTop + img.offsetHeight;if (imgTop < windowBottom && imgBottom > windowTop) {// 加载图片img.src = img.dataset.src;// 移除 data-src 属性,避免重复加载img.removeAttribute('data-src');}});// 如果所有图片都已加载完毕,移除滚动事件的监听if (images.length === 0) {window.removeEventListener('scroll', lazyLoad);}}function handleImageError(img) { // 图片加载失败时显示替代文本 img.alt = 'Image Failed to Load'; // 隐藏无法加载的图片 img.style.display = 'none'; }// 在页面加载完成后,直接加载可见范围内的图片(避免初始的空白占位)document.addEventListener('DOMContentLoaded', lazyLoad);</script></body>
</html>

在上面的示例中,图片标签添加了 data-src 属性来保存图片的真实地址。通过 JavaScript,监听滚动事件并判断图片是否进入视窗,当图片进入视窗时,将 data-src 的值赋给 src 属性,实现延迟加载图片。当图片加载失败时会触发 handleImageError 函数。该函数将替代文本设置为 “Image Failed to Load”,并将无法加载的图片隐藏起来。这样用户就能知道该图像无法加载,并且页面的布局不会被破坏。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/web/7137.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

一文搞定文件的读写操作

文件的操作 C C语言中&#xff0c;文件的读取操作流程如下&#xff1a; 定义一个文件的指针将指针指向需要打开的文件&#xff0c;并且赋予该指针权限&#xff08;读&#xff0c;写&#xff0c;追加&#xff09;然后开始向文件写/读数据 打开文件 定义文件指针&#xff1a;F…

Android面试必考题1-15

目录 Service 和 主进程区别 一、性能优化 2.什么情况下会导致内存泄露 3.如何避免 OOM 异常

链式队列基本操作

链式队列的基本概念 链式队列是一种常见的数据结构&#xff0c;它使用链表作为其底层数据存储结构。链式队列的特点是动态的内存分配&#xff0c;可以有效地处理队列的入队和出队操作。下面&#xff0c;我将介绍链式队列的实现方法&#xff0c;并提供相应的C语言代码示例。 链…

C语言-设置控制台信息

Win_API Win_API是Windows应用程序接口&#xff08;Windows Application Programming Interface&#xff09;的缩写&#xff0c;它是一组函数、系统服务和程序接口&#xff0c;允许开发者在微软Windows操作系统上创建应用程序。Win32 API 是Windows API的一个主要部分&#xff…

Linux PXE高效批量网络装机

系统初始化 systemctl disable --now firewalld.service setenforce 0 vim /etc/selinux/config 安装软件 yum install -y tftp-server xinetd dhcp vsftpd syslinux 复制 vmlinuz initrd.img pxelinux.0 到 /var/lib/tftpboot/ 目录 [rootlocalhost ~]# cd /mnt/…

设计模式之业务代表模式

在编程江湖的风雨中漂泊多年&#xff0c;每当我遇到那些错综复杂的业务逻辑和系统交互&#xff0c;总有一个模式像一位忠诚的骑士&#xff0c;默默守护着我的代码城堡&#xff0c;那就是——业务代表模式&#xff08;Business Delegate Pattern&#xff09;。它不是最耀眼的明星…

C++ 如何进阶?

一、C基础&#xff08;3个月&#xff09; 1、面向对象的三大特性&#xff1a;封装、继承、多态 2、类的访问权限&#xff1a;private、protected、public 3、类的构造函数、析构函数、赋值函数、拷贝函数 4、移动构造函数与接贝构造函数对比 5、深接贝与浅贝的区别 6、空…

【C++语言】类和对象--默认成员函数 (中)

文章目录 前言类的六个默认成员函数&#xff1a;1. 构造函数概念特性做了什么&#xff1f;易错注意&#xff1a;显式定义和默认构造函数 2. 析构函数概念特征做了什么?注意事项&#xff1a; 3.拷贝构造函数概念特征做了什么&#xff1f;注意事项&#xff1a; 4.赋值运算符重载…

MySQL基础_4.排序与分页

文章目录 一、排序二、分页 一、排序 使用 ORDER BY 子句排序&#xff1a; ASC&#xff08;ascend&#xff09;: 升序DESC&#xff08;descend&#xff09;:降序 二、分页 MySQL中使用 LIMIT 实现分页&#xff0c;格式&#xff1a; LIMIT [位置偏移量,] 行数第一个“位置偏…

Linux程序库文件调试测试方法

Linux编译后的.so文件是需要进行上机测试的&#xff0c;对于已经量产的硬件平台来说一般是通过具有相同功能的样机测试新版本的功能&#xff0c;具体如下。 Linux的量产固件由于已经经过裁剪系统内部的usr lib etc等目录是只读的权限不可以修改因此不能将测试库直接放到其下进行…

JavaScript异步编程——01-单线程和异步任务

单线程 JS 是单线程的 JavaScript 语言的执行是单线程的。即同一时间&#xff0c;只能处理一个任务。 具体来说&#xff0c;所谓单线程&#xff0c;是指 JS 引擎中负责解释和执行 JavaScript 代码的线程只有一个&#xff0c;即同一时间&#xff0c;只能处理一个任务。这个任…

CellMarker | 人骨骼肌组织细胞Marker大全!~(强烈建议火速收藏!)

1写在前面 分享一下最近看到的2篇paper关于骨骼肌组织的细胞Marker&#xff0c;绝对的Atlas级好东西。&#x1f44d; 希望做单细胞的小伙伴觉得有用哦。&#x1f60f; 2常用marker&#xff08;一&#xff09; general_mrkrs <- c( MYH7, TNNT1, TNNT3, MYH1, MYH2, "C…

ComfyUI 基础教程(十三):ComfyUI-Impact-Pack 面部修复

SD的WebUI 中的面部修复神器 ADetailer,无法在ComfyUI 中使用。那么如何在ComfyUI中进行面部处理呢?ComfyUI 中也有几个面部修复功能,比如ComfyUI Impact Pack(FaceDetailer),以及换脸插件Reactor和IPAdapter。 ComfyUI-Impact-Pack 是一个功能强大的插件,专为 ComfyUI …

GDB的常用命令

GDB&#xff08;GNU Debugger&#xff09;是Linux和其他类Unix系统中常用的调试工具&#xff0c;用于调试C、C等编程语言编写的程序。以下是一些GDB常用的命令&#xff1a; 启动和基本操作 gdb [executable-file]&#xff1a;启动GDB并加载指定的可执行文件。 run [arguments]…

淘宝扭蛋机小程序开发:开启你的惊喜之旅

一、扭出新世界&#xff0c;惊喜不断 在这个充满无限可能的数字时代&#xff0c;淘宝扭蛋机小程序为你带来了一种全新的购物与娱乐体验。扭蛋机&#xff0c;这个充满童趣和惊喜的玩具&#xff0c;如今在我们的小程序中焕发出新的活力&#xff0c;为你带来一波又一波的惊喜与快…

【CTF Web】XCTF GFSJ0485 simple_php Writeup(代码审计+GET请求+PHP弱类型漏洞)

simple_php 小宁听说php是最好的语言,于是她简单学习之后写了几行php代码。 解法 &#xfeff;<?php show_source(__FILE__); include("config.php"); $a$_GET[a]; $b$_GET[b]; if($a0 and $a){echo $flag1; } if(is_numeric($b)){exit(); } if($b>1234){ech…

jquery项目 html使用export import方式调用模块

jquery的老项目&#xff0c;引入vue3, 需要方便使用export, import方式引用一些常用的方法与常量 导出模块 export js/numberUtil.js /*** Description:* Author Lani* date 2024/1/10*//* * 【金额】 保留2位小数&#xff0c;不四舍五入 * 5.992550 >5.99 , 2 > 2.…

【Kaggle】练习赛《洪水数据集的回归预测》(下)

前言 上篇《洪水数据集的回归预测》(上) 介绍了该数据集非常特殊之处&#xff0c;各特征都非常类似&#xff0c;没有特别之处&#xff0c;各特征之间的相关系数几乎为零。同时&#xff0c;各类模型不敏感&#xff0c;最理想的模型居然是线性回归&#xff0c;决定系数 R 2 R^2 …

64位Office API声明语句第118讲

跟我学VBA&#xff0c;我这里专注VBA, 授人以渔。我98年开始&#xff0c;从源码接触VBA已经20余年了&#xff0c;随着年龄的增长&#xff0c;越来越觉得有必要把这项技能传递给需要这项技术的职场人员。希望职场和数据打交道的朋友&#xff0c;都来学习VBA,利用VBA,起码可以提高…

Python进阶:函数

Python进阶 函数的定义和调用 函数定义通常采用def关键词,后面跟着函数名及圆括号内的参数列表。 def function_name (parameters):"""函数文档字符串"""# 函数体...return expression # 可选&#xff0c;用于返回函数结果function_name是函数…