oll*_*rev 14 javascript css animation css3 keyframe
我有以下代码:http://jsfiddle.net/odj8v0x4/.
function stopGlobe() {
$('.mapfront').removeClass('mapfront-anim');
$('.mapback').removeClass('mapback-anim');
}
function startGlobe() {
$('.mapfront').addClass('mapfront-anim');
$('.mapback').addClass('mapback-anim');
}Run Code Online (Sandbox Code Playgroud)
@keyframes mapfront_spin {
0% {
background-position: 1400px 0%;
}
100% {
background-position: 0 0%;
}
}
@keyframes mapback_spin {
0% {
background-position: 0 0%;
}
100% {
background-position: 1400px 0%;
}
}
@-webkit-keyframes mapfront_spin {
0% {
background-position: 1400px 0%;
}
100% {
background-position: 0 0%;
}
}
@-webkit-keyframes mapback_spin {
0% {
background-position: 0 0%;
}
100% {
background-position: 1400px 0%;
}
}
body {
margin: 50px;
background: #000;
}
.globe {
width: 400px;
height: 400px;
position: relative;
}
.front {
width: 400px;
height: 400px;
background: url(http://dl.dropboxusercontent.com/u/17180596/SphereForeground.png);
z-index: 5;
position: absolute;
top: 0;
left: 0;
}
.back {
width: 400px;
height: 400px;
background: url(http://dl.dropboxusercontent.com/u/17180596/SphereBackground.png);
z-index: 2;
position: absolute;
top: 0;
left: 0;
}
.mapfront, .mapback {
border-radius: 300px;
width: 340px;
height: 340px;
position: absolute;
top: 30px;
left: 30px;
z-index: 4;
}
.mapfront {
background: url(http://dl.dropboxusercontent.com/u/17180596/CartoForeground.png) repeat-x;
}
.mapfront-anim {
-webkit-animation: mapfront_spin 15s linear infinite;
animation: mapfront_spin 15s linear infinite;
}
.mapback {
background: url(http://dl.dropboxusercontent.com/u/17180596/CartoBackground.png) repeat-x;
position: absolute;
}
.mapback-anim {
-webkit-animation: mapback_spin 15s linear infinite;
animation: mapback_spin 15s linear infinite;
}Run Code Online (Sandbox Code Playgroud)
<div class="globe">
<div class="front"></div>
<div class="mapfront mapfront-anim"></div>
<div class="mapback mapback-anim"></div>
<div class="back"></div>
</div>Run Code Online (Sandbox Code Playgroud)
执行javascript函数后stopGlobe()动画停止,但突然停止.
我可以顺利停止动画,避免突然跳入,然后从停止的位置再次继续动画吗?
val*_*als 13
您只需使用CSS即可实现此目的.
所需要的只是一点点动作才能让它变得平滑.
所以,我在需要时设置了转换.并且这种变换通过缓和转换,以产生平滑效果.
因此,当悬停时,动画停止(突然).但与此同时,应用了变换转换,并且由于此变换是通过适当的缓动转换的,因此它立即以与动画相同的速度开始.
根据宽松,这个速度会减慢,直到它停止.
我在应用了translate的元素中添加了一个包装器.为了避免这个变换"移动"元素,我们需要使元素大于可见空间,并设置在限制可见部分的包装内(这将是静态的)
只是徘徊在地球上.(看马,没有JS)
@keyframes mapfront_spin {
0% { background-position: 1400px 0%; }
100% { background-position: 0 0%; }
}
@keyframes mapback_spin {
0% { background-position: 0 0%; }
100% { background-position: 1400px 0%; }
}
@-webkit-keyframes mapfront_spin {
0% { background-position: 1400px 0%; }
100% { background-position: 0 0%; }
}
@-webkit-keyframes mapback_spin {
0% { background-position: 0 0%; }
100% { background-position: 1400px 0%; }
}
body {
margin: 50px;
background: #000;
}
.globe {
width: 400px;
height: 400px;
position: relative;
}
.front {
width: 400px;
height: 400px;
background: url(http://dl.dropboxusercontent.com/u/17180596/SphereForeground.png);
z-index: 5;
position: absolute;
top: 0;
left: 0;
}
.back {
width: 400px;
height: 400px;
background: url(http://dl.dropboxusercontent.com/u/17180596/SphereBackground.png);
z-index: 2;
position: absolute;
top: 0;
left: 0;
}
.mapfront, .mapback {
border-radius: 300px;
width: 340px;
height: 340px;
position: absolute;
top: 30px;
left: 30px;
z-index: 4;
overflow: hidden;
}
.mapfront-inner {
width: 380px;
height: 340px;
top: 0px;
left: 0px;
position: absolute;
background: url(http://dl.dropboxusercontent.com/u/17180596/CartoForeground.png) repeat-x;
transition: transform 1s ease-out;
}
.mapfront-anim {
-webkit-animation: mapfront_spin 15s linear infinite;
animation: mapfront_spin 15s linear infinite;
}
.globe:hover .mapfront-anim,
.globe:hover .mapback-anim
{
-webkit-animation-play-state: paused;
animation-play-state: paused;
}
.globe:hover .mapfront-inner {
transform: translateX(-40px);
}
.mapback-inner {
width: 380px;
height: 340px;
top: 0px;
left: -40px;
background: url(http://dl.dropboxusercontent.com/u/17180596/CartoBackground.png) repeat-x;
position: absolute;
transition: transform 1s ease-out;
}
.globe:hover .mapback-inner {
transform: translateX(40px);
}
.mapback-anim {
-webkit-animation: mapback_spin 15s linear infinite;
animation: mapback_spin 15s linear infinite;
}Run Code Online (Sandbox Code Playgroud)
<div class="globe">
<div class="front"></div>
<div class="mapfront">
<div class="mapfront-inner mapfront-anim">
</div>
</div>
<div class="mapback">
<div class="mapback-inner mapback-anim">
</div>
</div>
<div class="back"></div>
</div>Run Code Online (Sandbox Code Playgroud)
你不会喜欢这个答案,但现实是CSS3动画并不是真正有用的.为了完成这项工作,你需要在你的Javascript中复制很多CSS,这会破坏这一点(例如在这个密切相关的答案中改变动画CSS3的速度?).为了让它顺利停止你最好的选择是在像Greensock动画库这样的平台上编写动画,它提供了让它实际上顺利停止而不是突然停止所需的所有工具.