更改布局时防止 CSS 淡入淡出

Prevent CSS Fade when Changing Layout

所以我有一个 div,上面有一个基本的 CSS 不透明度设置:

.fade {
    opacity: 1;
}

<div class="menu">
    <div class="fade">Text</div>
</div>

棘手的是,对于大屏幕尺寸,此 div 意味着始终可见,但在较小的屏幕上,它意味着隐藏,然后在按下按钮时淡出 in/out点击了。

<div class="menu toggled">
    <div class="fade">Text</div>
</div>

@media(max-width:767px) {
    .fade {
        -webkit-transition: opacity 0.5s ease 0s;
        transition: opacity 0.5s ease 0s;
        opacity: 0;
    }

    .toggled .fade {
        opacity: 1;
    }
}

我 运行 遇到的问题(我意识到它很挑剔)是当我调整 window 的大小时,越过阈值到较小的屏幕尺寸会导致元素跳转到它的新位置然后淡出。这看起来很奇怪。我只希望 div 在捕捉到新位置时立即变得不可见。有没有一种方法可以在不破坏较小屏幕尺寸上切换按钮的淡入淡出 in/out 变换的情况下做到这一点?

我想出了一些解决方案来防止在调整大小时出现淡入淡出,但到目前为止,它们都在使用切换时破坏了淡出动画。

提前致谢!

更新 1:

感谢@Chris James Champeaux 的回答!我对它进行了一些修改以满足我的需要:

$(".menu").each(function ()
{
    if ($(this).hasClass("toggled"))
    {
        $(this).removeClass("toggled");
        $(this).children(".fade").each(function ()
        {
            $opacity = $(this).css("opacity");
            $(this).stop(true).animate({ "opacity": "0" }, 500 * $opacity, function ()
            {
                $(this).css("opacity", "");
            });
        });
    }
    else
    {
        $(this).addClass("toggled");
        $(this).children(".fade").each(function ()
        {
            $opacity = $(this).css("opacity");
            $(this).stop(true).animate({ "opacity": "1" }, 500 * (1 - $opacity));
        });
    }
});

在淡出后清除内联不透明度样式的回调是必要的,以便将控制权交还给样式表(否则在转换回较大的屏幕尺寸时元素将保持隐藏状态)。

stop() 调用和插值持续时间是可选的,如果用户在淡入淡出完成之前再次按下按钮,动画会平滑地反转。

总之,问题解决了。 :) 再次感谢克里斯!

更新 2:

也只是为了向以后遇到此问题的任何人澄清...使用此解决方案,您还可以从样式表中删除不透明动画,使其像这样:

.fade {
    opacity: 1;
}

@media(max-width:767px) {
    .fade {
        opacity: 0;
    }
}

您可以在 jquery 中通过单击来设置淡入淡出的动画效果,可能还可以使用 javascript。

$(".toggle").click(function () {
    if ($(".fade").css("opacity") > 0) {
        $(".fade).animate({"opacity": "0"}, 500);
    } else {
        $(".fade).animate({"opacity": "1"}, 500);
    }
});

我没有对此进行测试,但它应该可以工作