我想知道如何平滑我的动画当它第一次开始。目前,每个泡泡都会在过渡到流畅的动画之前蹒跚前行,但我不希望在创业时出现任何明显的变化。
我试过以下几种方法:
所有这些都不起作用,我不知道如何达到这一效果。
$(document).ready(function() {
var bubbles = $('.bubble')
function animate_bubbles() {
bubbles.each(function(index) {
$(this).css( 'animation-delay', `${index * 0.3}s` )
$(this).addClass('bubble-active')
})
}
animate_bubbles()
});html, body {
height: 100%;
}
#page-wrapper {
box-sizing: border-box;
padding: 10%;
background: black;
height: 100%;
display: flex;
flex-direction: row;
justify-content: space-around;
align-items: center;
flex-wrap: wrap;
}
.bubble {
background: skyblue;
border-radius: 50%;
width: 5%;
margin-right: 5%;
}
.bubble:before {
content: '';
display: block;
padding-top: 100%;
}
.bubble-active {
animation: bubble-animation 3s infinite linear;
}
@keyframes bubble-animation {
from {
transform: rotate(0deg) translateX(25%) rotate(0deg);
}
to {
transform: rotate(360deg) translateX(25%) rotate(-360deg);
}
}<!doctype html>
<html lang='en'>
<head>
<meta charset='utf-8' />
<meta name='viewport' content='width=device-width, initial-scale=1.0'>
<link href="https://cdnjs.cloudflare.com/ajax/libs/meyer-reset/2.0/reset.css" rel="stylesheet"/>
<link rel='stylesheet' href='test.css'>
</head>
<body>
<div id='page-wrapper'>
<div class='bubble'></div>
<div class='bubble'></div>
<div class='bubble'></div>
<div class='bubble'></div>
<div class='bubble'></div>
<div class='bubble'></div>
<div class='bubble'></div>
<div class='bubble'></div>
<div class='bubble'></div>
<div class='bubble'></div>
<div class='bubble'></div>
<div class='bubble'></div>
<div class='bubble'></div>
<div class='bubble'></div>
<div class='bubble'></div>
<div class='bubble'></div>
<div class='bubble'></div>
<div class='bubble'></div>
</div>
<script src='https://ajax.googleapis.com/ajax/libs/jquery/3.2.1/jquery.min.js'></script>
<script src='test.js'></script>
</body>
</html>
发布于 2017-10-03 22:47:27
他们像这样向右移动,因为动画的开始立即将气泡告诉translateX(25%)。如果使用已应用的转换加载页面,它将按您的要求工作。请参阅下面的更新片段,其中只有一行额外的CSS。
$(document).ready(function() {
var bubbles = $('.bubble')
function animate_bubbles() {
bubbles.each(function(index) {
$(this).css( 'animation-delay', `${index * 0.3}s` )
$(this).addClass('bubble-active')
})
}
animate_bubbles()
});html, body {
height: 100%;
}
#page-wrapper {
box-sizing: border-box;
padding: 10%;
background: black;
height: 100%;
display: flex;
flex-direction: row;
justify-content: space-around;
align-items: center;
flex-wrap: wrap;
}
.bubble {
background: skyblue;
border-radius: 50%;
width: 5%;
margin-right: 5%;
transform: rotate(0deg) translateX(25%) rotate(0deg);
}
.bubble:before {
content: '';
display: block;
padding-top: 100%;
}
.bubble-active {
animation: bubble-animation 3s infinite linear;
}
@keyframes bubble-animation {
from {
transform: rotate(0deg) translateX(25%) rotate(0deg);
}
to {
transform: rotate(360deg) translateX(25%) rotate(-360deg);
}
}<!doctype html>
<html lang='en'>
<head>
<meta charset='utf-8' />
<meta name='viewport' content='width=device-width, initial-scale=1.0'>
<link href="https://cdnjs.cloudflare.com/ajax/libs/meyer-reset/2.0/reset.css" rel="stylesheet"/>
<link rel='stylesheet' href='test.css'>
</head>
<body>
<div id='page-wrapper'>
<div class='bubble'></div>
<div class='bubble'></div>
<div class='bubble'></div>
<div class='bubble'></div>
<div class='bubble'></div>
<div class='bubble'></div>
<div class='bubble'></div>
<div class='bubble'></div>
<div class='bubble'></div>
<div class='bubble'></div>
<div class='bubble'></div>
<div class='bubble'></div>
<div class='bubble'></div>
<div class='bubble'></div>
<div class='bubble'></div>
<div class='bubble'></div>
<div class='bubble'></div>
<div class='bubble'></div>
</div>
<script src='https://ajax.googleapis.com/ajax/libs/jquery/3.2.1/jquery.min.js'></script>
<script src='test.js'></script>
</body>
</html>
发布于 2017-10-03 22:46:12
您需要做的是在translateX of 0%上开始和结束关键帧,添加额外的关键帧来处理实际的动画。在下面的示例中,我在50%添加了一个额外的关键帧点,指向25%的translateX偏移量。
这导致了一个“平稳”的转变,但确实会导致泡沫一旦回到原来的位置就会短暂停止。您可能需要考虑在keyframe动画中添加额外的点,每个动画中都有自己独特的translateX偏移:)
$(document).ready(function() {
var bubbles = $('.bubble')
function animate_bubbles() {
bubbles.each(function(index) {
$(this).css('animation-delay', `${index * 0.3}s`)
$(this).addClass('bubble-active')
})
}
animate_bubbles()
});html,
body {
height: 100%;
}
#page-wrapper {
box-sizing: border-box;
padding: 10%;
background: black;
height: 100%;
display: flex;
flex-direction: row;
justify-content: space-around;
align-items: center;
flex-wrap: wrap;
}
.bubble {
background: skyblue;
border-radius: 50%;
width: 5%;
margin-right: 5%;
}
.bubble:before {
content: '';
display: block;
padding-top: 100%;
}
.bubble-active {
animation: bubble-animation 3s infinite linear;
}
@keyframes bubble-animation {
0% {
transform: rotate(0deg) translateX(0%) rotate(0deg);
}
50% {
transform: rotate(360deg) translateX(25%) rotate(-360deg);
}
100% {
transform: rotate(360deg) translateX(0%) rotate(-360deg);
}
}<!doctype html>
<html lang='en'>
<head>
<meta charset='utf-8' />
<meta name='viewport' content='width=device-width, initial-scale=1.0'>
<link href="https://cdnjs.cloudflare.com/ajax/libs/meyer-reset/2.0/reset.css" rel="stylesheet" />
<link rel='stylesheet' href='test.css'>
</head>
<body>
<div id='page-wrapper'>
<div class='bubble'></div>
<div class='bubble'></div>
<div class='bubble'></div>
<div class='bubble'></div>
<div class='bubble'></div>
<div class='bubble'></div>
<div class='bubble'></div>
<div class='bubble'></div>
<div class='bubble'></div>
<div class='bubble'></div>
<div class='bubble'></div>
<div class='bubble'></div>
<div class='bubble'></div>
<div class='bubble'></div>
<div class='bubble'></div>
<div class='bubble'></div>
<div class='bubble'></div>
<div class='bubble'></div>
</div>
<script src='https://ajax.googleapis.com/ajax/libs/jquery/3.2.1/jquery.min.js'></script>
<script src='test.js'></script>
</body>
</html>
希望这会有帮助!)
https://stackoverflow.com/questions/46554439
复制相似问题