当前位置: 首页 > news >正文

Vue 登录页高低分辨率背景图优化实现

在实际前端项目中,登录页往往是用户进入应用的第一印象窗口。如果直接加载高分辨率图片作为背景,可能会导致首屏加载缓慢,影响用户体验。本文将以 Vue 实现为例,介绍如何优雅地处理登录页的低分辨率占位图 + 高分辨率图片懒加载方案,同时实现页面动画过渡效果。

一、项目需求分析

  1. 快速首屏显示:使用低分辨率图片占位,保证页面快速渲染。

  2. 高分辨率渐入显示:高分辨率图片加载完成后,平滑切换背景,提升视觉体验

  3. 可扩展性:登录页包含账号密码输入框、忘记密码按钮和登录操作,背景切换逻辑应独立,不影响业务逻辑。

二、实现思路

  • 初始渲染低分辨率图片:在 login-container 默认背景中设置低分辨率图。

  • 高分辨率图片懒加载:在 mounted() 生命周期中创建 Image 对象,监听 onload 事件。

  • 切换 CSS class:高分辨率图片加载完成后,修改组件状态,触发 class 切换,实现背景渐变切换

核心流程

graph TD
A[页面加载] --> B[显示低分辨率背景]
B --> C[创建高分辨率 Image 对象]
C --> D[监听图片加载完成事件]
D --> E[切换 highLoaded 状态]
E --> F[触发 CSS 背景切换]

三、全部代码 

 <div :class="['login-container', { 'high-loaded': highLoaded }]">highLoaded: false, // 高分辨率背景是否加载完成 loadHighResBackground() {const img = new Image();img.src = require('../assets/infinity-6467887.png'); // 高分辨率图片路径img.onload = () => {this.highLoaded = true; // 切换 class,触发背景替换};},.login-container {background: url('../assets/infinity-low.png') no-repeat center center;background-size: cover;transition: background-image 0.5s ease-in-out;
}.login-container.high-loaded {background: url('../assets/infinity-6467887.png') no-repeat center center;background-size: cover;
}

1.<div :class="['login-container', { 'high-loaded': highLoaded }]"> 解析

这段代码是 Vue 的动态绑定 class 写法,意思是:

<div class="login-container" :class="{ 'high-loaded': highLoaded }">
  • login-container:这是固定的基础 class,始终存在。

  • { 'high-loaded': highLoaded }:这是动态 class,当 highLoadedtrue 时,会给 <div> 添加 high-loaded 这个 class。

2. const img = new Image(); 解析

这段代码是手动创建一个图片对象并加载图片,主要用来异步预加载高分辨率背景图

const img = new Image();
img.src = require('../assets/infinity-6467887.png'); // 高分图路径
img.onload = () => {this.highLoaded = true; // 高分图加载完成,触发 class 切换
};
  • new Image():创建一个 JavaScript 的 Image 对象,相当于在内存里生成一个图片元素,但不会直接渲染到页面上。

  • img.src = ...:给 Image 对象赋值路径,浏览器会开始加载这张图片。

    • require('../assets/infinity-6467887.png'):Webpack 或 Vite 打包方式,确保图片路径被正确解析。

  • img.onload:监听图片加载完成事件,当图片完全加载后触发回调。

  • this.highLoaded = true:修改 Vue 组件状态 → 触发动态 class 切换 → 背景图替换为高分辨率图。

http://www.dtcms.com/a/354346.html

相关文章:

  • mathtype公式存在乱码
  • SqlHelper类的方法详细解读和使用示例
  • Libvio访问异常排查指南
  • sql server 取起始日期到结束日期中自然月最后一天,与日期维度行转列
  • 数据治理:AI健康血液的生命线
  • Elasticsearch数据迁移快照方案初探(一):多节点集群配置踩坑记
  • Anaconda的安装与使用
  • 文本分块的优化策略-语义完整性、控制长度、重叠切分、结合模型,考虑大模型输入限制
  • matlab的app中传递数据
  • 林墨2025全新个人EP《嘻嘻呵呵嘿嘿哈哈》 第三支单曲解锁
  • 【数据分享】安徽省安庆市地理基础数据(道路、水系、铁路、行政边界(含乡镇)、DEM等)
  • 企业分支上云的常见误区与纠正方案
  • LeetCode - 反转链表 / K 个一组翻转链表
  • HSA35NV001美光固态闪存NQ482NQ470
  • CT03-215.数组中第k大的元素
  • 面试之微服务架构
  • 美团面试手撕:手动实现开方函数math.sqrt(x)
  • Spring Security 深度学习(一): 基础入门与默认行为分析
  • 【Vue2 ✨】Vue2 入门之旅(一):初识 Vue2
  • 详细梳理 MyBatis-Plus 的 QueryWrapper 和 LambdaQueryWrapper的入门到精通
  • App中分发中的防盗链开发是做什么的?防盗链有什么作用?什么是防盗链?
  • vscode 如何调试 python 2.7
  • 【PyTorch】基于YOLO的多目标检测项目(一)
  • 免费开源图片压缩工具|绿色版本地运行,支持批量压缩+格式转换,不上传数据,隐私安全有保障!
  • 解决delphi label 在timer下闪烁的问题
  • 字节面试手撕题:神经网络模型损失函数与梯度推导
  • CSS(面试)
  • Mojomox-在线 AI logo 设计工具
  • 从“流量焦虑”到“稳定增长”:用内容平衡术解锁Adsense变现新密码
  • 电子器械如何统一管理系统权限?一场IT治理的“攻坚战”