【问题标题】:Why does jQuery.fadeTo not animate if toggleClass is called in the callback?如果在回调中调用了 toggleClass,为什么 jQuery.fadeTo 不动画?
【发布时间】:2016-12-31 02:34:32
【问题描述】:

我有一个以“隐藏”类开头的模态框,它使模态 display: none; (以防止不可见的模态捕获鼠标点击)

要淡入模态,我会这样做

jQuery('#modalID').toggleClass('hidden'); <-- Makes the modal display: block; by removing the "hidden" class
jQuery('#modalID').fadeTo(.3, 1.0);

效果很好。问题是当我尝试在淡出后重新打开“隐藏”类时(使其再次显示:无:)。当我尝试在fadeTo 回调中切换“隐藏”类时,模式会立即消失。这是我的代码

jQuery('#modalID').fadeTo(.3, 0, function(){
    jQuery('#modalID').toggleClass('hidden'); <-- *should* make the modal display:none AFTER fading it out....
});

我尝试在fadeTo回调中显式添加类

jQuery('#modalID').fadeTo(.3, 0, function(){
    jQuery('#modalID').addClass('hidden');
});

甚至尝试完全忽略回调,只是将命令背靠背...

jQuery('#overlayID').fadeTo(.3, 0); jQuery('#overlayID').toggleClass('hidden');

如何将模态淡出,然后将“隐藏”类添加回模态后缀?

【问题讨论】:

    标签: jquery toggleclass fadeto


    【解决方案1】:

    问题是由于您的 duration 参数造成的。它以毫秒为单位,因此您的.3 设置意味着0.0003 秒。因此,淡入淡出是瞬间出现的,并且立即触发了回调。

    要解决此问题,您可能希望动画持续 0.3 秒,因此该值应为 300。试试这个:

    $('#modalID').fadeTo(300, 0, function(){
        $(this).toggleClass('hidden');
    });
    

    还请注意,您可以只使用fadeOut() 并避免使用第二个参数来表示不透明度。

    【讨论】:

    • 但在 fadTo 上我使用了 .3 并且它在 0.3 秒内完美淡出
    • 我看不出这怎么可能:.3: jsfiddle.net/6yLtvc38, 300: jsfiddle.net/6yLtvc38/1
    • 这绝对不是问题。将其更改为 300 使其在淡入时变慢 WAAAAAAY。使用 0.3 的淡入效果完美。这只是淡出
    • 我看到了你的小提琴。但这不是我正在经历的。我确实在控制台中看到它说“JQMigrate 已安装 1.4.1”......甚至不知道那是什么。也许这个 WP Theme 实际上并没有使用 jQuery?如果我尝试手动加载 jQuery,它会破坏东西:(
    • 好的,所以我手动加载了 jQuery V 3.1.1。打破了其他一些东西,但我只是想看看这是否是问题所在。 (现在,我不得不使用毫秒)但是动画不太流畅,问题仍然存在。淡入作品,淡出瞬间……
    猜你喜欢
    • 1970-01-01
    • 2019-10-25
    • 1970-01-01
    • 2018-07-31
    • 1970-01-01
    • 1970-01-01
    • 2020-08-12
    • 2021-04-23
    • 2023-03-08
    相关资源
    最近更新 更多