css - CSS 结束一个关键帧循环动画并让它重新开始动画
问题描述
我有一个旋转正方形的循环动画。当我删除启用动画的类时,正方形立即回到起始位置。
我需要能够将正方形动画化回 JS 事件的起始位置。
这是一个代码笔。
我尝试向元素添加变换,并切换到另一个关键帧动画,但都没有奏效。
html:
<div class="container">
<div class="animate rotating"></div>
</div>
CSS:
.container{
position: absolute;
width: 100%;
height: 100%;
background-color: #333;
}
.animate{
width: 100px;
height: 100px;
background-color: red;
position: absolute;
top: 50%;
left: 50%;
margin: -50px 0 0 -50px;
transform: all 2s ease;
}
@keyframes rotating {
0%{transform: rotate(30deg);}
50%{transform: rotate(-30deg);}
100%{transform: rotate(30deg);}
}
.rotating {
animation: rotating 6s ease-in-out infinite forwards;
animation-delay: -2s;
}
jQuery:
$('.animate').click(function(){
$(this).removeClass('rotating');
});
解决方案
你的代码有一点问题:
transform: all 2s ease;
你打错了过渡,但我很确定这种方法行不通。如果您愿意使用 jQuery 完成此操作,您可以获得当前旋转并应用于您的元素:
function getRotationDegrees(obj) {
var matrix = obj.css("-webkit-transform") ||
obj.css("-moz-transform") ||
obj.css("-ms-transform") ||
obj.css("-o-transform") ||
obj.css("transform");
if(matrix !== 'none') {
var values = matrix.split('(')[1].split(')')[0].split(',');
var a = values[0];
var b = values[1];
var angle = Math.round(Math.atan2(b, a) * (180/Math.PI));
} else { var angle = 0; }
return (angle < 0) ? angle + 360 : angle;
}
$('.animate').click(function(){
var el = $(this);
var elRotate = getRotationDegrees(el);
el.css('transform',`rotate(${elRotate}deg)`);
el.removeClass('rotating');
// set new transform here
});
这将冻结您的元素旋转,您可以在最后设置所需的旋转并应用过渡。
推荐阅读
- multiple-columns - Power Query 无法将选项卡识别为代码中 .txt 文件中的分隔符
- c++ - C++Mutex 和条件变量解锁/同步
- amazon-web-services - 为什么我在 AWS Cognito 服务中看不到用户自定义属性
- virtual-machine - 全屏在 vmware 中不起作用(ubuntu 16.04 LTS)
- mysql - 发布到 IIS 服务器后,带有 MySql 的 ASP.NET Identity 问题
- html - 如何在水平对齐的 ul 中垂直对齐父级及其子级?
- swift - 最大化窗口大小而无需全屏 Xcode macOS
- vue.js - 为什么 setup() 不起作用“无法读取未定义的属性‘用户名’”
- sql - 将 SAS SQL 转换为 Hive SQL
- android - 微调器选择的项目与工具栏标题的样式相同