html - Angular Pre-Bootstrap 动画可以在另一个线程上使用还是异步运行?
问题描述
有没有办法在单独的线程上显示预加载动画,直到角度加载完全?我发现动画非常紧张且不流畅。我查看了控制台,动画仅在加载脚本之间更新。如果脚本需要一段时间才能加载,则动画会冻结
例如,当以下脚本加载 main.js、styles.js 尤其是 vendor.js 时,动画会冻结 1 到 2 秒。如下图所示
<!doctype html>
<html lang="en">
<head>
<meta http-equiv="x-ua-compatible" content="IE=edge">
<meta charset="utf-8">
<title>My Application</title>
<base href="/">
<meta name="viewport" content="width=device-width, initial-scale=1">
<link rel="icon" type="image/x-icon" href="favicon.ico">
<style>
app-root {
display: flex;
justify-content: center;
align-items: center;
height: 100vh;
color: #fff;
text-transform: uppercase;
font-family: -apple-system,
BlinkMacSystemFont,
"Segoe UI",
Roboto,
Oxygen-Sans,
Ubuntu,
Cantarell,
Helvetica,
sans-serif;
font-size: 2.5em;
text-shadow: 2px 2px 10px rgba(0, 0, 0, 0.2);
}
body {
transition: opacity 0 ease-in-out 1s;
background: darkgray;
margin: 0;
padding: 0;
}
@keyframes dots {
50% {
transform: translateY(-.4rem);
}
100% {
transform: translateY(0);
}
}
.d {
animation: dots 1.5s ease-out infinite;
}
.d-2 {
animation-delay: .9s;
}
.d-3 {
animation-delay: 1s;
}
</style>
Loading<span class="d">.</span><span class="d d-2">.</span><span class="d d-3">.</span>
</app-root>
</body>
</html>
解决方案
您正在使用转换,理论上应该使用与 UI 不同的线程,因此它不应该被 JS 阻止。
在 CSS 中,您可以尝试使用will-change
动画属性列出将更改的特定属性,如下所示:
.element {
will-change: transform, opacity;
}
will-change
表示元素的属性将发生变化,以便浏览器可以做出适当的准备。
使用 will-change 会消耗资源,请注意过度使用会导致进一步的性能问题。不建议默认将其放在每个动画之前。
推荐阅读
- flutter - Flutter - 如何为 Card 小部件的某些百分比着色?
- google-apps-script - 如何在应用脚本高级服务中指定要在 Google DataStudio 中使用的数组字段?
- python - Tkinter 回调中的异常当您再次按下按钮 1 时
- php - 创建新 Symfony 项目时出现 UnexpectedValueException
- html - 从锚点中选择数据过滤器
- vaadin - 如何从另一个 UI 调用一个 UI 的方法而不进行初始化且不使方法成为静态。- 瓦丁 14
- google-apps-script - 我想删除电子表格中所有在 A 列的单元格中没有任何值的行
- android - 当我使用 classLoader.loadClass(completeClassName); 时找不到我的班级;
- sql - 需要在 SQL 中对值进行分组
- javascript - 如何更改在可排序 JQuery 中拖动的元素