【问题标题】:How to loop animated text banners using css keyframes如何使用 css 关键帧循环动画文本横幅
【发布时间】:2015-01-06 14:10:45
【问题描述】:

我想使用 css 关键帧循环这个文字广告横幅。

  1. 首先显示的文本1
  2. 第二次添加 text2(text1 保留在那里)
  3. 添加的第三个按钮(text1 和 text2 也保留在那里)
  4. 然后消失其中 3 个
  5. 再次显示文本1
  6. 第二次添加 text2(text1 保留在那里)
  7. 添加的第三个按钮(text1 和 text2 也保留在那里)

我怎样才能重复(循环)这些动作?

如果我在 -webkit-animation 中有无限,我只能循环一个元素。

有人可以帮忙吗? 这是我的代码http://jsfiddle.net/ddpatty/Ng3Qf/

.lg-text-1 {
    -webkit-animation: txt-animation 0.8s 1 ease-in-out;
}
.lg-text-2 {
    -webkit-animation: txt-animation 1.5s 0.8s 1 ease-in-out;
}
.button {
    -webkit-animation: btn-animation 2s 0.3s 1 ease-in-out;
}
@-webkit-keyframes txt-animation {
0%   {opacity: 0;}
80%  {opacity: 0.8;}
100% {opacity: 1;}
}

@-webkit-keyframes btn-animation {
0%   {opacity: 0;}
80%  {opacity: 0;}
100% {opacity: 1;}
}

【问题讨论】:

  • 为了循环内容,您需要两个内容副本,以允许结尾和开头并排。当两者之间的边界离开屏幕时,将位置重置为起点并重新开始。
  • 我没有很好地解释我想要做什么,所以我做了一些编辑。在这种情况下我必须有两份吗?

标签: css html animation css-animations banner-ads


【解决方案1】:

正如我在评论中所说,您必须为每个动画使用不同的关键帧。然后你可以完全控制动画之间的延迟,关键是所有的持续时间都是一样的,所以你有一个完美的循环。请注意,使用animation-delay 将使每个动画都有自己的周期(具有相同的持续时间)。您可以尝试调整它以使所有动画的总延迟时间和持续时间相等,但调整非常困难。我会为每个元素创建不同的关键帧(以及动画)。这是代码(仅适用于 webkit):

.lg-text-1 {
    -webkit-animation: txt-animation1 3s infinite ease-in-out;  
}

.lg-text-2 {
    -webkit-animation: txt-animation2 3s infinite ease-in-out;
}

.button {
    /*....*/
    -webkit-animation: btn-animation 3s infinite ease-in-out;
}

@-webkit-keyframes txt-animation1 {
    0%, 20% {opacity: 0;}
    60%  {opacity: 0.8;}
    100% {opacity: 1;}
}

@-webkit-keyframes txt-animation2 {
    0%, 40% {opacity: 0;}
    60%  {opacity: 0.8;}
    100% {opacity: 1;}
}


@-webkit-keyframes btn-animation {
    0%, 60%   {opacity: 0;} 
    80%, 100% {opacity: 1;}
}

Updated demo

【讨论】:

  • 非常感谢!这正是我想做的。
  • @ddpatty 不客气。事实上,我并不打算添加答案,但看起来您确实需要它。
【解决方案2】:

我很确定你不能单独使用 CSS 重新启动动画onclick。您将需要使用 jquery/javascript。

演示http://jsfiddle.net/Ng3Qf/1/

$("a").click(function () {

    var el = $('#one'),
        newone = el.clone(true);

    el.before(newone);

    $("." + el.attr("class") + ":last").remove();

    var el2 = $('#two'),
        newone2 = el2.clone(true);

    el2.before(newone2);

    $("." + el2.attr("class") + ":last").remove();

});

【讨论】:

  • 我确信这个问题可以使用 CSS 动画来解决。但是,它需要为每个元素设置不同的动画。它还需要时间测试......因为骑自行车真的不是一件容易想象的事情。此外,您的代码不会循环它。我怀疑 OP 想要循环它(看起来像一个横幅),直到用户点击按钮并且一些弹出窗口跳出来......
  • 我非常非常有兴趣看到一个 CSS 仅点击解决方案。
  • 为什么你认为 OP 在这里需要一个点击处理程序?他想循环它(就像一个时钟,循环运行)。
  • 这里是纯 CSS 演示(与您的代码类似)jsfiddle.net/viphalongpro/Ng3Qf/3 虽然它很 hacky,难以控制行为,但它是使其成为纯 CSS 的方法。但是,这只是一个示例,并未显示 OP 的问题。
  • 我编辑了我的帖子。我想我没有很好地解释我想要做什么。不点击这个按钮,我想显示,第一个你好第二个添加你好(你好留在那里)第三个添加按钮(你好和你留在那里)然后,其中3个消失了。重复这些动作。这就是我想做的。
猜你喜欢
  • 2023-04-01
  • 1970-01-01
  • 2021-02-02
  • 1970-01-01
  • 2023-03-20
  • 2021-01-06
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多