GSAP Javascript if else 语句问题

GSAP Javascript if else statement woes

我正在使用 HTML、CSS 和 JS 构建一个基本的网上银行应用程序。

到目前为止,我有最近的交易屏幕和用于打开每笔交易描述的简单动画。

我使用 GSAP 创建动画,jQuery 处理元素。

但是,我 运行 在描述 window 打开后关闭时遇到了问题。

CODEPEN HERE,这里是 JS:

$(document).ready(function() {
  $('.list li').click(function() {

    var i = $(this).find('i');
    var li = $(this);
    var desc = $(this).next();
    var tl = new TimelineMax({paused:false});
    var open = false;

    if (open === true) {
      tl.to(i, .3, {rotation: 0})
        .to(li, .3, {borderBottom: 'none', delay: -.2})
        .to(desc, .3, {height: '0', padding: '0', delay: -.2});
      open = false;
    } else {
      tl.to(i, .3, {rotation: 90})
        .to(li, .3, {borderBottom: '2px solid #95a5a6', delay: -.2})
        .to(desc, .3, {height: '55px', padding: '5px', delay: -.2});
      open = true;
    }


  });


});

我使用 if 语句根据描述 window 是打开还是关闭来决定播放哪个动画。

我是一名学习编码的设计师,我会采纳任何我能得到的建议。

你的想法是对的,但是var open = false;是在错误的范围内。它的编写方式,每次调用点击处理程序时,open 都定义为 false,您想将它放在父范围内:在点击处理程序之外,在点击处理程序被调用之前。

EDIT 因为你想跟踪每个元素的 "open" 状态,你需要为每个元素创建一个 closure元素。您可以使用 .each() 来做到这一点。

你可以这样做:

$(document).ready(function() {

  $('.list li').each(function() {

     var open = false;  // <-- Put "open" here

     $(this).click(function() {

        var i = $(this).find('i');
        var li = $(this);
        var desc = $(this).next();
        var tl = new TimelineMax({paused:false});
        // get rid of "open" here

       if (open === true) {
          tl.to(i, .3, {rotation: 0})
            .to(li, .3, {borderBottom: 'none', delay: -.2})
            .to(desc, .3, {height: '0', padding: '0', delay: -.2});
           open = false;
        } else {
           tl.to(i, .3, {rotation: 90})
             .to(li, .3, {borderBottom: '2px solid #95a5a6', delay: -.2})
             .to(desc, .3, {height: '55px', padding: '5px', delay: -.2});
           open = true;
        }


      });


    });
});