html - 限制每个会话的 CSS 动画
问题描述
我的网站目前在标题中有一个 SVG 徽标,它在加载时使用 CSS 进行动画处理。我真的很想将此动画限制为每个会话一次。
我了解如何将动画限制为仅循环一次,但是每当用户导航到新页面时,它都会在页面加载时再次动画一次。目标是让动画播放一次,然后无论用户导航到哪个页面都不再动画。
我愿意接受有关如何实现这一目标的建议。
该网站建立在 NOP Commerce 系统上,使用自定义 Web 打印插件。
任何帮助将不胜感激。
谢谢
解决方案
这将需要一些逻辑,无论是服务器端还是一些 Javascript。
下面是一个基于 javascript 的有效解决方案的示例。徽标的 ID 为logo
,并且动画仅在徽标也具有类的情况下才以徽标为目标animate
。
Javascript 检查是否设置了sessionStorage变量。如果不是,则将该类添加到徽标中,并设置 sessionStorage 变量使其不会再次运行。
注意:该示例不会在 Stackoverflow 上运行,但应该可以在现实生活中使用。
if (window.sessionStorage.getItem('logoAnimated') === null) {
document.getElementById("logo").classList.add('animate');
window.sessionStorage.setItem('logoAnimated', 1);
}
@keyframes logoAnimation {
from {
transform: rotate(0);
}
to {
transform: rotate(360deg);
}
}
#logo.animate {
animation: logoAnimation 1s;
}
<img id="logo" src="https://placekitten.com/g/100/100" alt="">
推荐阅读
- java - 在 Java 的模板提案中代表什么不同的颜色和符号?
- nosql - RavenDB 替代以减少预算
- arrays - Mongoose Model, cleaning/parsing an Array efficiently
- cmake - What is the proper way to document a CMake module?
- c# - Creating a Visual Studio menu command to get current active file path
- php - 如何在 Bootstrap Modal 中传递 GET 变量?
- html - 三个具有自动宽度的 div 与最宽的 div 一样宽,使每个 div 与其内容一样宽
- c# - AlwaysEncrypted 插入间歇性失败
- unity3d - Unity ScriptableObject 加载行为
- json - 如何在 JSON 响应中拆分参数的多个值?