javascript - 即使您在中途停止悬停,如何强制动画完成然后反转以开始悬停?
问题描述
我发现了这个我觉得非常有趣的代码笔,并试图在悬停时开始,然后保持打开状态,直到你停止悬停,然后它会反转并关闭。我的问题是,首先,它要么在悬停时做动画,然后在悬停时直接跳到开始。同样,当在动画中途离开悬停时,它只是跳回到起点。我试过“.box:hover and box:hover:after”但没有成功。任何帮助,将不胜感激!
笔
免责声明,这不是我的笔,我发现它并认为它很酷。归功于创作者
*{
margin:0;
padding:0;
}
.container {
background: #f0f0f0;
box-sizing: border-box;
display: flex;
justify-content: center;
align-items: center;
width: 100vw;
height: 100vh;
}
.box {
border-radius: 20px;
width: 60px;
height: 60px;
background: #f0f0f0;
box-shadow: 0 0 0 #cccccc,
0 0 0 #ffffff,
10px 10px 10px #cccccc inset,
-10px -10px 10px #ffffff inset;
animation: anime 3s cubic-bezier(0.16, 1, 0.3, 1) 1s infinite alternate;
/* animation-fill-mode: forwards; */
}
@keyframes anime {
0% {
width: 60px;
height: 60px;
background: #f0f0f0;
box-shadow: 0 0 0 #cccccc,
0 0 0 #ffffff,
10px 10px 10px #cccccc inset,
-10px -10px 10px #ffffff inset;
}
25% {
width: 60px;
height: 60px;
background: #f8f8f8;
box-shadow: 10px 10px 10px #cccccc,
10px 10px 10px #ffffff,
0 0 0 #cccccc inset,
0 0 0 #ffffff inset;
}
50% {
width: 60px;
height: 240px;
background: #f8f8f8;
box-shadow: 10px 10px 10px #cccccc,
10px 10px 10px #ffffff,
0 0 0 #cccccc inset,
0 0 0 #ffffff inset;
}
100% {
width: 480px;
height: 240px;
background: #fafafa;
box-shadow: 40px 40px 40px #cccccc,
0 0 0 #ffffff,
0 0 0 #cccccc inset,
2px 2px 2px #ffffff inset;
}
<body>
<div class="container">
<div class="box"></div>
</div>
</body>
解决方案
我想你的问题的答案是这样的
function fn(el, isEnter) {
el.className = "";
requestAnimationFrame(() => {
requestAnimationFrame(() => {
el.className = isEnter? "in": "out";
});
});
}
.in{
animation: k 1s forwards;
}
.out{
animation: k 1s forwards;
animation-direction: reverse;
}
@keyframes k
{
from {transform: rotate(0deg);}
to {transform: rotate(360deg);}
}
<div style="width:100px; height:100px; background-color:red"
onmouseenter="fn(this, true)"
onmouseleave="fn(this, false)"
/>
推荐阅读
- emu8086 - 如何在不使用 HLT 的情况下对程序进行 HLT
- python - Python - 如何可视化 LogisticRegression 的决策边界?
- maple - 简单但正确的方程式在 Maple 中给出“错误,”-“意外”
- python - 如何匹配模式并向其添加字符
- makefile - 如何在 makefile 中为内核模块构建目标设置预处理器指令?
- amazon-web-services - DynamoDB 使用 AWS GoLang SDK 列出所有备份
- angular - 无法导入 ReactiveFormsModule
- wordpress - 在 WooCommerce 中按下“下订单”按钮之前检查用户电子邮件地址
- ruby-on-rails - 使用 store_accesors 查询活动记录
- java - 序列化键值对的 HashMap 并将其转换为 Java 中的格式化字符串