Paw*_*weł 12 html css animation css3
我没有默认的动画元素.还有一个触发器可以让我打开和关闭该元素的动画.动画本身非常简单:从左到右移动元素.
当我停止动画时,我的元素显然会回到初始位置.但它突然回来了,并不顺利.所以它只是改变了我从关闭动画到初始动画时的位置.我的问题是:有没有办法让它顺利停止,所以当我关闭动画时它会回到初始位置但是平滑/动画.
这是我的元素和动画:http://jsfiddle.net/2Lwftq6r/
HTML:
<input type="checkbox" id="anim">
<label for="anim">Start / stop animation</label>
<div></div>
Run Code Online (Sandbox Code Playgroud)
CSS:
div {
margin-top: 50px;
width: 50px; height: 10px;
background: #000;
transform: translateX(0);
}
#anim:checked ~ div {
-webkit-animation: dance 2s infinite ease-in-out;
-moz-animation: dance 2s infinite ease-in-out;
}
@-webkit-keyframes dance {
0%, 100% { -webkit-transform: translateX(0); }
50% { -webkit-transform: translateX(300px); }
}
@-moz-keyframes dance {
0%, 100% { -moz-transform: translateX(0); }
50% { -moz-transform: translateX(300px); }
}
Run Code Online (Sandbox Code Playgroud)
您不能仅以这种CSS3
方式存档此效果,但是如果确实需要,可以使用jQuery
+ CSS3 Transitions
。我的解决方案(http://jsfiddle.net/sergdenisov/3jouzkxr/10/):
HTML:
<input type="checkbox" id="anim-input">
<label for="anim-input">Start / stop animation</label>
<div class="anim-div"></div>
Run Code Online (Sandbox Code Playgroud)
CSS:
.anim-div {
margin-top: 50px;
width: 50px;
height: 10px;
background: #000;
}
.anim-div_active {
-webkit-animation: moving 2s ease-in-out infinite alternate;
animation: moving 2s ease-in-out infinite alternate;
}
.anim-div_return {
-webkit-transition: -webkit-transform 0.5s ease-in-out;
transition: transform 0.5s ease-in-out;
}
@-webkit-keyframes moving {
0% { -webkit-transform: translateX(0); }
100% { -webkit-transform: translateX(300px); }
}
@keyframes moving {
0% { transform: translateX(0); }
100% { transform: translateX(300px); }
}
Run Code Online (Sandbox Code Playgroud)
Javascript:
$('#anim-input').on('change', function() {
var $animDiv = $('.anim-div');
if (this.checked) {
$animDiv.removeClass('anim-div_return')
.addClass('anim-div_active');
return;
}
var transformValue = $animDiv.css('webkitTransform') ||
$animDiv.css('transform');
$animDiv.css({'webkitTransform': transformValue,
'transform': transformValue})
.removeClass('anim-div_active');
requestAnimationFrame(function() {
$animDiv.addClass('anim-div_return')
.css({'webkitTransform': 'translateX(0)',
'transform': 'translateX(0)'});
});
});
Run Code Online (Sandbox Code Playgroud)
PS 供应商前缀基于来自http://caniuse.com的实际浏览器列表。
我只是遇到了同样的问题,我通过不使用动画解决了它,它完美地工作!看看我的解决方案:所以我有这个刮刀,我只能在悬停时移动,我希望它顺利过渡,所以这就是我做的:
#Spatula:hover{
animation-direction:alternate;
transform: translate(1.2cm,1cm);
transition: all 1.5s;
-webkit-transition: all 1.5s;
}
#Spatula{
-webkit-transition: all 1.5s;
transition: all 1.5s;
}
Run Code Online (Sandbox Code Playgroud)
祝好运!
你不会喜欢这个答案,但现实是 CSS3 动画对于实现这一点并没有真正的用处。为了完成这项工作,您需要在 Javascript 中复制大量 CSS,这会破坏要点(例如,在这个密切相关的答案中 更改动画 CSS3 的速度?)。要真正使其平稳停止,最好的选择是在像Greensock 动画库这样的平台上编写动画 ,该平台提供了使其真正平稳停止而不是突然停止所需的所有工具。
下面还有另一个答案确实在使用CSS方面做出了努力,你可以看看那个。