当前位置: 首页 > 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.lryc.cn/news/617692.html

相关文章:

  • 【JAVA】使用系统音频设置播放音频
  • 在线代码比对工具
  • Selenium元素定位不到原因以及怎么办?
  • 机器学习 TF-IDF提取关键词,从原理到实践的文本特征提取利器​
  • Effective C++ 条款36: 绝不重新定义继承而来的非虚函数
  • Excel 连接阿里云 RDS MySQL
  • 开闭原则代码示例
  • Pytest项目_day11(fixture、conftest)
  • js数组reduce高阶应用
  • B 树与 B + 树解析与实现
  • 可商用的 AI 图片生成工具推荐(2025 最新整理)
  • Kubernetes部署apisix的理论与最佳实践(一)
  • 专题:2025人形机器人与服务机器人技术及市场报告|附130+份报告PDF汇总下载
  • docker安装Engine stopped
  • 内置redis使用方法
  • Python 高阶函数:filter、map、reduce 详解
  • 【软考架构】主流数据持久化技术框架
  • Spring Boot Excel数据导入数据库实现详解
  • 6s081实验1
  • 机器翻译:一文掌握序列到序列(Seq2Seq)模型(包括手写Seq2Seq模型)
  • 机器学习TF-IDF算法详解
  • GPT-oss:OpenAI再次开源新模型,技术报告解读
  • 视频播放器哪个好用?视频播放器PotPlayer,KMP Player
  • FPGA学习笔记——DS18B20(数字温度传感器)
  • Mysql系列--6、内置函数
  • C++的结构体传参
  • 深度学习与遥感入门(五)|GAT 构图消融 + 分块全图预测:更稳更快的高光谱图分类(PyTorch Geometric 实战)
  • rust编译过程的中间表现形式如何查看,ast,hir,mir
  • Rust 实战五 | 配置 Tauri 应用图标及解决 exe 被识别为威胁的问题
  • istio如何采集method、url指标