前端页面加载由模糊到清晰的实现方案

news/2024/9/18 15:48:27/ 标签: 前端

要实现图片加载时由模糊逐渐变得清晰的效果,可以使用 CSSJavaScript 的结合。这里的思路是:先让图片在加载时模糊显示,等图片完全加载完后,再去掉模糊效果。

1. 使用 CSS 实现模糊效果

我们可以使用 filter: blur() 来为图片添加模糊效果,结合 transition 属性在加载完成时逐渐移除模糊效果。

HTML 示例:
<img src="example.jpg" alt="Example Image" class="lazy-image">
CSS 示例:
/* 初始模糊效果 */
.lazy-image {filter: blur(10px);transition: filter 1s ease; /* 1秒的模糊过渡效果 */opacity: 0.5; /* 可以先显示半透明,过渡到完全清晰 */
}/* 图片加载完成后移除模糊效果 */
.lazy-image.loaded {filter: blur(0);opacity: 1;
}

2. 使用 JavaScript 检测图片加载完成

我们使用 JavaScript 监听图片的加载事件,当图片加载完成时,移除模糊效果。

JavaScript 示例:
document.addEventListener("DOMContentLoaded", function () {const lazyImages = document.querySelectorAll("img.lazy-image");lazyImages.forEach(img => {img.addEventListener('load', () => {img.classList.add('loaded'); // 添加 loaded 类来触发清晰效果});// 如果图片已经缓存中,可以立即触发加载事件if (img.complete) {img.classList.add('loaded');}});
});

3. 完整代码

这是一个完整的示例,结合 HTML、CSS 和 JavaScript 实现图片由模糊到清晰的过渡效果。

HTML:
<img src="example.jpg" alt="Example Image" class="lazy-image">
<img src="example2.jpg" alt="Example Image 2" class="lazy-image">
CSS:
/* 图片初始状态为模糊 */
.lazy-image {filter: blur(10px);transition: filter 1s ease, opacity 1s ease; /* 模糊和透明度过渡效果 */opacity: 0.5; /* 初始透明度 */
}/* 加载完成时,去掉模糊效果和半透明 */
.lazy-image.loaded {filter: blur(0);opacity: 1;
}
JavaScript:
document.addEventListener("DOMContentLoaded", function () {const lazyImages = document.querySelectorAll("img.lazy-image");lazyImages.forEach(img => {img.addEventListener('load', () => {img.classList.add('loaded'); // 图片加载完成后添加 "loaded" 类});// 如果图片已经在缓存中,直接触发加载完成的效果if (img.complete) {img.classList.add('loaded');}});
});

4. 其他优化

如果你的图片比较多或者页面比较复杂,你可以结合懒加载和模糊加载效果一起使用,确保图片在进入可视区域时再进行模糊加载,从而提升页面性能和用户体验。

通过上述方式,你就可以实现图片由模糊逐渐清晰的效果,且加载过程更加优雅。


http://www.ppmy.cn/news/1525613.html

相关文章

[数据集][目标检测]车油口挡板开关闭合检测数据集VOC+YOLO格式138张2类别

数据集格式&#xff1a;Pascal VOC格式YOLO格式(不包含分割路径的txt文件&#xff0c;仅仅包含jpg图片以及对应的VOC格式xml文件和yolo格式txt文件) 图片数量(jpg文件个数)&#xff1a;138 标注数量(xml文件个数)&#xff1a;138 标注数量(txt文件个数)&#xff1a;138 标注类别…

从C语言过渡到C++

&#x1f4d4;个人主页&#x1f4da;&#xff1a;秋邱-CSDN博客☀️专属专栏✨&#xff1a;C &#x1f3c5;往期回顾&#x1f3c6;&#xff1a;单链表实现&#xff1a;从理论到代码-CSDN博客&#x1f31f;其他专栏&#x1f31f;&#xff1a;C语言_秋邱的博客-CSDN博客 目录 ​…

Day 72

作业 #ifndef MAINWINDOW_H #define MAINWINDOW_H #include <QMainWindow> #include <QLineEdit> #include <QLabel> #include <QIcon> #include <QPushButton> #include <QMovie> #include <QPainter> #include <QWidget> …

性能测试 —— linux服务器搭建JMeter+Grafana+Influxdb监控可视化平台!

前言 在当前激烈的市场竞争中&#xff0c;创新和效率成为企业发展的核心要素之一。在这种背景下&#xff0c;如何保证产品和服务的稳定性、可靠性以及高效性就显得尤为重要。 而在软件开发过程中&#xff0c;性能测试是一项不可或缺的环节&#xff0c;它可以有效的评估一个系…

Leetcode - 周赛414

目录 一&#xff0c;3280. 将日期转换为二进制表示 二&#xff0c;3281. 范围内整数的最大得分 三&#xff0c;3282. 到达数组末尾的最大得分 四&#xff0c;3283. 吃掉所有兵需要的最多移动次数 一&#xff0c;3280. 将日期转换为二进制表示 本题就是简单的字符串和整数之…

EG边缘计算网关连接中移ONENET物联网平台(MQTT协议)

上文&#xff1a;EG边缘计算网关连接阿里云物联网平台&#xff08;MQTT协议&#xff09; 需求概述 本章节主要实现一个流程&#xff1a;EG8200mini采集Modbus RTU数据&#xff0c;通过MQTT协议连接中移ONENET物联网平台 Modbus RTU采集此处不做过多赘述&#xff0c;可参考其…

在线小说|基于java的小说阅读系统小程序(源码+数据库+文档)

在线小说|小说阅读系统|小说阅读系统小程序 目录 基于java的小说阅读系统小程序 一、前言 二、系统设计 三、系统功能设计 四、数据库设计 五、核心代码 六、论文参考 七、最新计算机毕设选题推荐 八、源码获取&#xff1a; 博主介绍&#xff1a;✌️大厂码农|毕设布…

MySQL一:在Ubuntu下安装MySQL数据库

目录 前言 1.查看操作系统版本 2.添加MySQLAPT源 2.1下载发布包 ​编辑 2.2安装发布包 3.安装MySQL 4.查看MySQL状态 5.开启自启动 ​编辑 6.登录MySQL 前言 操作系统版本为Ubuntu 22.04.6LTS 1.查看操作系统版本 lsb_release -a 2.添加MySQLAPT源 2.1下载发布包 M…

鸿蒙(API 12 Beta6版)超帧功能开发【顶点标记】

概述 OpenGTX是GPU Turbo X的开放式入口&#xff0c;根据游戏开发者主动提供的游戏过程中的关键信息&#xff0c;使能LTPO&#xff08;动态帧率/刷新率&#xff09;等游戏加速方案&#xff0c;助力游戏开发者打造高画质、高流畅、低功耗极致体验。LTPO通过动态感知游戏渲染状态…

ACL 2024:交叉领域情感分析——论文阅读笔记

前言 阅读了一篇ABSA的论文&#xff0c;在这里写下自己的一些理解小笔记&#xff0c;可能有点小乱&#xff0c;原文在这下面&#xff1a; 论文链接&#xff1a;Refining and Synthesis: A Simple yet Effective Data Augmentation Framework for Cross-Domain Aspect-based Sen…

vue2响应式系统是如何实现的(手写)

引言 喜欢请点赞&#xff0c;支持点在看。 关注牛马圈&#xff0c;干货不间断。 忆往昔 回头看&#xff0c;已经使用vue2多年&#xff0c;虽然也掌握了其他几种前端框架&#xff0c;但对vue2是真爱。 核心概念 Object.defineProperty Vue 2的响应式系统核心是使用了Object.de…

深入理解java并发编程之aqs框架

跟synchronized 相比较&#xff0c;可重入锁ReentrankLock其实原理有什么不同&#xff1f; 所得基本原理是为了达到一个目的&#xff1b;就是让所有线程都能看到某种标记。synchronized通过在对象头中设置标记实现了这一目的&#xff0c;是一种JVM原生的锁实现方式。而Reentran…

​经​纬​恒​润​二​面​​三​七​互​娱​一​面​​元​象​二​面​

1. 请尽可能详细地说明&#xff0c;进程和线程的区别&#xff0c;分别有哪些应用场景&#xff1f;进程间如何通信&#xff1f;线程间如何通信&#xff1f;你的回答中不要写出示例代码。 进程和线程是操作系统中的两个基本概念&#xff0c;它们在计算机系统中扮演着不同的角色&…

《数据结构(C语言版)第二版》第八章-排序(8.5-归并排序、8.6基数排序、8.7 外部排序)

8.5 归并排序 (Merging Sort) 【基本思想】 将两个或两个以上的有序表合并成一个有序表的过程。 将两个有序表合并成一个有序表的过程称为2-路归并&#xff0c;2-路归并最为简单和常用。 假设初始序列含有n个记录&#xff0c;则可看成是n个有序的子序列&#xff0c;每个子序列…

Git换行符自动转换参数core.autocrlf的用法

core.autocrlf 是 Git 中用于控制换行符自动转换的配置选项。它有以下几个可能的值&#xff1a; 1. true 作用&#xff1a;在 checkin 时将 CRLF 转换为 LF&#xff0c;在 checkout 时将 LF 转换为 CRLF。适用场景&#xff1a;适用于 Windows 用户&#xff0c;希望在本地文件…

如何让Windows控制台窗口不接受鼠标点击(禁用鼠标输入)

一、简述 在我们编写控制台应用程序时&#xff0c;默认情况下程序的打印输出会在控制台窗口中进行显示&#xff0c;我们在写服务功能时在窗口中会不断打印消息输出&#xff0c;这个时候如果使用鼠标点击了控制台窗口&#xff0c;会阻塞程序的继续运行&#xff0c;导致我们的程…

Python安装:Mac 使用brew 安装Python2 和 Python3

安装python ## python2 brew install python ## python3 brew install python3出现错误 Error: An unexpected error occurred during the brew link step The formula built, but is not symlinked into /usr/local Permission denied dir_s_mkdir - /usr/local/Frameworks …

uniapp媒体

uni.previewImage实现图片放大预览 // 图片预览函数function onPreview(index) {// 收集所有图片的urlvar urls pets.value.data.map(item > item.url)// 预览图片uni.previewImage({current: index, // 当前预览的图片索引urls: urls // 所有图片的url数组})}

HarmonyOS】ArkTS学习之基于TextTimer的简易计时器的elapsedTime最小时间单位问题

本文旨在纪录自己对TextTimer使用过程的疑惑问题 我在查看教程时候&#xff0c;发现很多博客在onTimer(event: (utc: number, elapsedTime: number) > void) 这里提到elapsedTime&#xff1a;计时器经过的时间&#xff0c;单位为毫秒。我不清楚是否为版本问题。 在我查看ver…

编写XBOX控制器实现鼠标键盘输入

1.核心部分, XINPUT输入封装 XInput封装https://mp.csdn.net/mp_blog/creation/editor/1420701282.对话框窗口编写 Win32 对话框封装-CSDN博客https://blog.csdn.net/Flame_Cyclone/article/details/142110008?spm1001.2014.3001.5501 3.使用到的其他封装 字符串编码转换与…