【问题标题】:How can I remove a class *after* a GSAP timeline animation finishes?如何*在* GSAP 时间线动画完成后删除一个类?
【发布时间】:2020-01-05 23:11:08
【问题描述】:

我创建了一个简单的 GSAP 时间轴动画,用于在整个视口上滑动全屏 div。

因为它要滑入的页面上有可滚动的内容,所以我将可见性设置为隐藏,并将其推离页面。当我单击选定的导航链接时,会添加“活动”类并触发动画。

由于某种原因,当我反转它时,它会立即删除该类,即使我添加了如下内容:

$(closeAbout).on('click', "#close", function () {
            timeline.reversed() ? timeline.play() : timeline.reverse();
            $("#teambio").removeClass('active');
        });

我在下面包含了所有时间线代码,以防对任何人有帮助:

var closeAbout = $('#close');
var openAbout = $('#about');
var main = $('main');

var timeline = new TimelineMax({
    paused: true,
    reversed: true
});

timeline
    .to( "main", 0.3, {
        opacity: 0,
    }, 0)
    .to(".about", 1, {
        y: "0%",
        ease: Power4.easeInOut
    })
    .to(".blurb", 1, {
        y: "0%",
        opacity: 1,
        ease: Power4.easeInOut,
        delay: 0.5
    }, 0)
    .to("#close", 0.5, {
        opacity: 1,
        ease: Power4.easeInOut,
        delay: 0.8,
    }, 0);

$(openAbout).on('click', "#about", function () {
    $("#teambio").addClass('active');
    timeline.reversed() ? timeline.play() : timeline.reverse();
});

$(closeAbout).on('click', "#close", function () {
        timeline.reversed() ? timeline.play() : timeline.reverse();
        $("#teambio").removeClass('active');
    });

我想要的只是在时间线结束后删除该类,并且由于某种原因,我尝试过的任何方法都不起作用。

另外,我知道我可能比这里显示的更好地构建和命名所有这些,但我既是 GSAP 的新手,也只是试图让它发挥作用。

我们将不胜感激任何帮助和耐心。

【问题讨论】:

    标签: javascript jquery gsap


    【解决方案1】:

    这样的:

    timeline.reversed() ? timeline.play() : timeline.reverse();
    $("#teambio").removeClass('active');
    

    .play().reverse() 函数将运行并开始制作动画。一旦该函数返回,下一行将运行,删除该类。您不希望下一行等待动画完成完成,因为这样您的所有 JavaScript 都将等待动画完成!

    您应该做的是利用 GS​​AP 的 onComplete 回调:

    var timeline = new TimelineMax({
        paused: true,
        reversed: true,
        onComplete: function() {
            $("#teambio").removeClass('active');
        }
    });
    

    每次补间完成时,GSAP 都会触发该函数。

    顺便说一句,我们建议您升级到GSAP 3,这样做很容易!一旦你习惯了,新的格式就很好了。

    【讨论】:

    • 我觉得我应该补充一点,预期的功能是让用户点击一个链接,然后 div 向上滑动。在 div 内部有一个“关闭”按钮,用于启动时间轴的反转。在时间轴反转并且 div 移出视图后,有什么方法可以运行 removeClass 吗?现在它会在动画启动后删除该类,并将 div 移到 视图中,导致 div 在显示后立即消失。
    • @samlynndavis 当然,在时间线的 vars 参数中使用 onReverseComplete
    猜你喜欢
    • 2020-05-11
    • 1970-01-01
    • 2010-11-28
    • 2013-07-15
    • 1970-01-01
    • 2010-10-21
    • 1970-01-01
    • 1970-01-01
    • 2021-09-04
    相关资源
    最近更新 更多