【问题标题】:How to prevent css keyframe animation on page load? [duplicate]如何防止页面加载时的css关键帧动画?
【发布时间】:2016-12-26 09:09:22
【问题描述】:

我的页面上有一些带有关键帧的 CSS 动画,用于淡入/淡出元素。问题是当我加载页面时会显示淡出动画。

HTML:

<button class="toggle-good">Toggle display</button>
<p class="box">I move nicely!</p>

CSS:

.box {
  height: 0;
  opacity: 0;
  animation: FadeOut 1s ease-in-out;
}
.box.active {
  height: initial;
  opacity: 1;
  animation: FadeIn 1s ease-in-out;
}
@keyframes FadeIn {
  0% {
    opacity: 0;
    height: initial;
  }
  100% {
    opacity: 1;
    height: initial;
  }
}
@keyframes FadeOut {
  0% {
    opacity: 1;
    height: initial;
  }
  99% {
    opacity: 0;
    height: initial;
  }
  100% {
    height: 0;
    opacity: 0;
    height: 0;
  }
}

JS:

$('button').on('click', function(e) {
  $(this).siblings('.box').toggleClass('active');
})

工作示例: http://codepen.io/MickL/pen/LkvWaA

【问题讨论】:

标签: javascript css css-animations keyframe


【解决方案1】:

我尝试了不同的可能性。只有一个有效的方法是通过 JS 使用超时和绝对定位来隐藏它。

如果动画长于设置的超时时间,问题将是。或者动画需要在超时运行之前显示。

$('.box').css({
    'position': 'absolute',
    'top': '-9999px',
    'left': '-9999px'
});

setTimeout(function() {
    $('.box').css({
        'position': 'relative',
        'top': 'auto',
        'left': 'auto'
    });
}, 500);

【讨论】:

    【解决方案2】:

    您需要做的就是: animation-play-state: paused;

    但是,看看你的 codepen,关键帧动画可能不是你最好的。看起来您只是在使用关键帧来确保您的某些属性仅在动画结束时更改。幸运的是,实际上有一个过渡计时功能!

    1. 使用过渡属性,对可见性和指针事件使用 step-end 和 step-start。
    2. 用于防止与隐藏元素交互的指针事件。
    3. 隐藏时用于从文档流中移除对象的最大高度。

    我已经拼凑了一个快速代码笔来展示一个示例。

    http://codepen.io/SudoCat/pen/LkvyEJ?editors=0100

    【讨论】:

    • 感谢您的回答。我不能使用指针事件,因为我在滚动时切换动画。为了简单起见,我只是在这个示例中使用了一个按钮。
    • 指针事件属性只会阻止人们在隐藏块时与块进行交互 - 它不应该影响在滚动时切换动画。
    • 经过一番思考,我意识到我最初提到的 display:none 技术行不通。相反,我在转换中添加了一个 max-height 属性,以从文档流中删除对象。
    • 这个指针事件:没有达成交易!我只是使用过渡而不是关键帧,并将指针事件:无到初始状态而不改变高度。我也不确定如何使用动画播放状态:暂停;。我在初始状态下使用它没有任何效果。
    • 很高兴你能成功!过渡方法更适合这种情况,并且使用更少的代码,这总是一个优点!如果对您有帮助,请不要忘记将答案标记为正确,希望它也可以帮助其他人。
    猜你喜欢
    • 2015-03-12
    • 2013-11-02
    • 2014-06-09
    • 1970-01-01
    • 1970-01-01
    • 2012-06-29
    • 2013-08-12
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多