jquery - CSS 动画启动时不稳定

标签 jquery css animation

我想知道如何在动画首次启动时使其平滑。目前,每个气泡在转换为平滑动画之前都会向前倾斜,但我不希望在启动时出现任何明显的倾斜。

我尝试过以下方法:

  • 向气泡类添加过渡属性
  • 将动画计时功能更改为缓入
  • 将动画的持续时间更改为更长

这些都不起作用,我不知道如何实现这种效果。

$(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>

最佳答案

它们像这样向右移动,因为动画开始立即告诉气泡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>

关于jquery - CSS 动画启动时不稳定,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46554439/

相关文章:

javascript - 如何在不实际滚动的情况下确定滚动方向

javascript - 表单在 fancybox 中不起作用

JQuery滚动到带有滚动条的div内的div

javascript - 自定义 View 引擎来解决 Javascript/PartialView 问题?

javascript - 网页中的网页 : what HTML element can do that?

Android:在 View 区域外使用动画

ios - 如何使 UIView 动画重新执行,而不是在 IOS 中重复执行(Swift)

jquery - 添加新的 div 效果 jquery

javascript - 调整图像大小以匹配相框的宽度和高度

java - 我如何在这段代码中使随机对象移动?