【问题标题】:css chain transition animationcss链式过渡动画
【发布时间】:2012-05-14 18:28:03
【问题描述】:

一旦页面加载完毕,我想一个接一个地“出现”三个DIV。

我该怎么做?

我知道如何让单个div出现在mouseover上但没有任何触发,一个接一个地使用css,我怎样才能实现这样的平滑过渡?

【问题讨论】:

  • 我不是 css 动画专家,但我想您需要 javascript 来执行此操作。
  • animation-delay:1s; 或者如果您愿意,可以使用“ms”。
  • @RokoC.Buljan - 这并不能确保连锁反应,而只是延迟调用(请注意,这些不一样)。
  • 它可能会,但这不是之前发布的。不过这很有趣,我希望看到它在 jsFiddle 或类似的东西上工作。如果您认为它可以解决问题,请将其发布为答案。我一定会投票赞成的:)

标签: html css css-animations


【解决方案1】:

诀窍是首先执行动画以隐藏所有元素(当页面加载时),然后将其链接到将显示元素的动画。这是 PURE CSS & HTML 中的一个工作示例:

div.slideIn { 
          position: absolute; 
          top: 200px; 
          width: 100px; 
          height: 100px; 
          border: 1px solid black; 
          animation-name: hide, slideIn;
          animation-duration: 5s;
          animation-timing-function: ease-in;
          animation-iteration-count: 1; 
          -moz-animation-name: hide, slideIn;
          -moz-animation-duration: 5s;
          -moz-animation-timing-function: ease-in;
          -moz-animation-iteration-count: 1; 
          -webkit-animation-name: hide, slideIn;
          -webkit-animation-duration: 5s;
          -webkit-animation-timing-function: ease-in;
          -webkit-animation-iteration-count: 1; 
          -o-animation-name: hide, slideIn;
          -o-animation-duration: 5s;
          -o-animation-timing-function: ease-in;
          -o-animation-iteration-count: 1; 
          opacity: 1;
      } 
      div.slideIn.first {
          left: 50px; 
          animation-delay: 0s, 0s;
          -moz-animation-delay: 0s, 0s;
          -webkit-animation-delay: 0s, 0s;
          -o-animation-delay: 0s, 0s;
      }
      div.slideIn.second {
          left: 150px;
          animation-delay: 0s, 2s;
          -moz-animation-delay: 0s, 2s;
          -webkit-animation-delay: 0s, 2s;
          -o-animation-delay: 0s, 2s;
      }
      div.slideIn.third {
          left: 250px;
          animation-delay: 0s, 4s;
          -moz-animation-delay: 0s, 4s;
          -webkit-animation-delay: 0s, 4s;
          -o-animation-delay: 0s, 4s;
      }
      @keyframes hide
      { 
          from { opacity: 0; } to { opacity: 0 }
      }
      @-moz-keyframes hide
      { 
          from { opacity: 0; } to { opacity: 0 }
      }
      @-webkit-keyframes hide
      { 
          from { opacity: 0; } to { opacity: 0 }
      }
      @-o-keyframes hide
      { 
          from { opacity: 0; } to { opacity: 0 }
      }
      @keyframes slideIn
      { 
            0% { opacity: 0; top: -100px; }
            1% { opacity: 1; top: -100px; }
          100% { opacity: 1; top:  200px; } 
      } 
      @-moz-keyframes slideIn
      { 
            0% { opacity: 0; top: -100px; }
            1% { opacity: 1; top: -100px; }
          100% { opacity: 1; top:  200px; } 
      } 
      @-webkit-keyframes slideIn
      { 
            0% { opacity: 0; top: -100px; }
            1% { opacity: 1; top: -100px; }
          100% { opacity: 1; top:  200px; } 
      } 
      @-o-keyframes slideIn
      { 
            0% { opacity: 0; top: -100px; }
            1% { opacity: 1; top: -100px; }
          100% { opacity: 1; top:  200px; } 
      } 
]
    
<div class="slideIn first">I slid in</div> 
    <div class="slideIn second">I'm 2nd</div> 
    <div class="slideIn third">I'm 3rd</div> 

注意:从 slideIn 动画中删除 1% 的线以在滑入时淡入。
注意:IE 还不支持 CSS3 动画。

【讨论】:

  • 应该如何制作“一个接一个”的动画?
  • @RokoC.Buljan 由于 F.Muller 所说,我只是向他展示了如何在 CSS 中制作动画。不难发现他可以增加一个延迟和两个divs。无论如何,我已经更新了代码。
  • @trickeedickee 实际上我刚刚意识到诀窍是通过第一个动画快速隐藏元素,然后跟进动画以显示内容。查看我更新的帖子。
  • 这是一种享受,这就是我处理它的方式。我认为它应该有资格作为一个经过验证的答案。
  • @Phil 意思是按照这个确切的顺序执行一系列(链)动画。
【解决方案2】:

您可能正在寻找用于 CSS 过渡的动画回调。 Fabrizio Stelluto 就这个话题写了a great article,展示了解决这个问题的几种方法。

如果您使用 jQuery,则可以避免特征检测(嗅探)的开销,因为已经为此目的编写了(当然...)plugin。您可以使用它来链接 CSS 转换,就像您通常在 jQuery 下使用 JavaScript 动画调用一样,即使用动画回调来调用其他回调。

此外,在 StackOverflow 上发布了几个问题,您可能会发现它们有用:

【讨论】:

    【解决方案3】:

    使用 jQuery Transit 等框架,您可以通过以下方式完成此操作:

    Javascript:

    $(document).ready(function () {
    
        showDiv($('div:first'));
    
        function showDiv(div) {
            div.transition({
                opacity: 1
            }, 1000, function () {
                //call back
                showDiv(div.next("div"));
            });
        }
    });
    

    HTML:

    <div></div>
    <div></div>
    <div></div>
    

    CSS:

    div {
        margin: 20px;
        width: 100px;
        height: 100px;
        background-color: black;
        float: left;
        opacity: 0;
    }
    

    JS Fiddle Demo

    【讨论】:

    • 话题发起者想学习如何制作动画,而不是如何使用为您准备好的工具。
    猜你喜欢
    • 2018-04-20
    • 2020-03-20
    • 1970-01-01
    • 2020-08-16
    • 1970-01-01
    • 1970-01-01
    • 2021-03-12
    • 2018-02-06
    • 2014-04-26
    相关资源
    最近更新 更多