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

loading效果实现原理

# loading 效果实现原理笔记

## 问题背景

function changeSetting(setting) {console.log(setting);loading.value = true;setShow(false);draw();loading.value = false;}

在 `charts.vue` 文件中,点击高级设置的确定按钮后,设置了 `loading.value = true`,但用户看不到 loading 效果,因为代码立即执行了 `draw()` 并设置 `loading.value = false`。

## 原因分析

1. **JavaScript 单线程执行**:所有代码在一个主线程按顺序执行,同一时间只能做一件事。

2. **渲染与 JS 互斥**:浏览器渲染(更新 DOM、绘制界面)和 JavaScript 执行在同一线程,不能同时进行。

3. **事件循环机制**:如果 `loading.value = true` 和 `loading.value = false` 在同一事件循环中执行,浏览器没有机会渲染中间状态。

4. **执行速度过快**:代码执行速度极快,用户无法感知到短暂的 loading 状态。

## 解决方案

使用 `setTimeout` 延迟执行 `draw()` 和 `loading.value = false`,给浏览器渲染的机会:

function changeSetting(setting) {console.log(setting);loading.value = true;setShow(false);// 使用 setTimeout 确保 loading 有足够时间显示setTimeout(() => {draw();loading.value = false;}, 300);}

## 关键原理

1. **事件循环**:JavaScript 执行和浏览器渲染在不同的阶段进行。

2. **任务队列**:`setTimeout` 将回调函数放入任务队列,延迟执行。

3. **渲染时机**:当前事件循环结束后,浏览器会进行渲染,此时用户能看到 loading 效果。

4. **异步执行**:`setTimeout` 不是让代码变成异步,而是改变了代码的执行时机。

## 总结

- 不延迟时:代码在同一事件循环同步执行,没有渲染机会。

- 延迟后:`loading.value = true` 立即执行,回调函数延迟到下一事件循环,中间浏览器进行渲染。

- 300ms 延迟:给用户足够的视觉感知时间,同时不会让用户等待过久。

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

相关文章:

  • Elasticsearch Node.js 客户端的安装
  • 第六十一章:AI 模型的“视频加速术”:Wan视频扩散模型优化
  • 简单清晰的讲解一下RNN神经网络
  • HarmonyOS 开发入门 第一章
  • 力扣面试150题--阶乘后的零,Pow(x,n)直线上最多的点
  • Win10电脑密码忘记如何进入操作系统
  • 基于AS32S601芯片的商业卫星光纤放大器(EDFA)抗单粒子效应解决方案研究
  • 前端组件库双雄对决:Bootstrap vs Element UI 完全指南
  • Speech Databases of Typical Children and Children with SLI 数据集解读
  • 飞轮储能和超级电容综合对比分析
  • LintCode第1181题-二叉树的直径
  • VBA即用型代码手册:计算选择的单词数Count Words in Selection
  • (Arxiv-2025)Phantom-Data:迈向通用的主体一致性视频生成数据集
  • MathType关联Wps实现公式编辑【Tex语法适配】
  • 使用行为树控制机器人(一) —— 节点
  • 【C++语法】输出的设置 iomanip 与 std::ios 中的流操纵符
  • 金蝶云星辰模拟报价功能助力企业快速决策
  • CV 医学影像分类、分割、目标检测,之分类项目拆解
  • Nginx(企业高性能web服务器)
  • 需求优先级如何划分
  • AI炼丹日志-32- memvid 大模型数据库!用视频存储+语义检索实现秒级搜索
  • Pluto Pillow如何靠 “私人定制” 枕头引爆海外市场
  • 学习笔记|decorator 装饰器是什么?
  • 2025-8-11-C++ 学习 暴力枚举(2)
  • 【Linux文件操作】文件操作系统调用
  • [激光原理与应用-231]:光学 - 光学的主要分支、研究对象、应用场合与职业方向(几何光学、物理光学、量子光学、集成光学、非线性光学制造工艺、光学系统设计)
  • 左子树之和
  • 解锁AI性能密码:RAG和智能体评估指标的终极指南
  • 简单的身份验证中间件Tinyauth
  • Day43--动态规划--674. 最长连续递增序列,300. 最长递增子序列,718. 最长重复子数组