【问题标题】:jQuery fadeOut() skips after CSS fade injQuery fadeOut() 在 CSS 淡入后跳过
【发布时间】:2014-06-13 09:50:23
【问题描述】:

在使用 CSS 淡入元素后,我在使用 jQuery 淡出元素时遇到了一些令人沮丧的问题。我设置了一个 CSS 动画,以便在页面加载时使用以下内容淡入元素(我还包含相关的浏览器前缀,我正在使用 Stylus):

@keyframes fadein {
  from {
    opacity: 0;
  }
  to {
    opacity: 1;
  }
}
.elem {
    opacity: 0;
    animation: fadein 500ms ease-in 1ms forwards;
}

我的问题是,当激活运行以下命令的事件处理程序时,fadeOut 不会消失,而是直接跳到空:

    $('.elem').fadeOut(400, function(){
        $('.elem').fadeIn(400);
    });

我已经能够在this JSFiddle 中复制该问题。谁能帮我吗? :) 非常感谢!

【问题讨论】:

    标签: javascript jquery css


    【解决方案1】:

    我会说它与您使用的 CSS 冲突。 jQuery 可能正在使用其他与不透明度相关的属性,而不是您的 CSS。 An all jQuery solution might be this:

    CSS

    .elem {
        display: none;
    }
    

    jQuery

    $('.elem').fadeIn(1000); // on page load, fade in with jQuery
    
    $('#go').click(function(){
        $('.elem').fadeOut(400, function(){
            $('.elem').fadeIn(400);
        });
    });
    

    相关:Conflict between CSS transition and jQuery fade

    【讨论】:

    • 我最终使用的解决方案是您相关链接中的解决方案。将动画细节移动到不同的类,将类添加到元素,然后在淡出之前移除类似乎效果很好。我当然可以使用 jQuery 来完成这一切,但现在我已经让这个 CSS 动画工作了。谢谢!
    【解决方案2】:

    我知道您要求FadeInFadeOut...这是您的代码,而是使用animateopacity

    $('#go').click(function(){
        $('.elem').css('animation','none').animate({
            'opacity' : 0
            },function(){
                $('.elem').animate({
                    'opacity' : 1
                    });
            });
        });
    

    【讨论】:

    • 这很接近。在此初始操作中,发生了相同的行为,但在后续操作中,它正确地淡出。
    • 当然 :) 我更新了我的答案,交换了不透明度值。就像正确答案的作者一样,尽管我理所当然地认为您确实想使用不透明度和 css 动画,但我会按照他的方式进行操作。很高兴你让它工作:) 干杯!
    【解决方案3】:

    当使用fadeOut 时,似乎css-animation 比jQuery 应用于元素的内联样式具有更高的优先级。这意味着动画的 opacity : 1; 会覆盖 jQuery 应用的任何不透明度设置,直到 jQuery 将元素设置为 display:none;

    你可以这样做来绕过:

    $('#go').click(function(){
    
       $('.elem').css('animation','none').fadeOut(400, function(){
          $('.elem').fadeIn(400);
        });
    
    });
    

    【讨论】:

    • 这看起来很有希望,但似乎没有用。眨眼就消失了,然后再也没有回来。
    • 对不起,我错过了补充一点,我在玩游戏时在 jsFiddle 中设置了.elem { opacity: 1; ... }。这将使它按预期工作。 - jsfiddle.net/gRw7n/5
    猜你喜欢
    • 1970-01-01
    • 2020-01-15
    • 1970-01-01
    • 1970-01-01
    • 2020-03-29
    • 1970-01-01
    • 2011-10-01
    • 2015-05-27
    • 2011-04-04
    相关资源
    最近更新 更多