javascript - 从 Greensock 时间轴中以前的动画元素访问更新的 CSS 值

标签 javascript jquery css animation gsap

我有一个 TimelineLite(),它按顺序执行一系列 .to() 补间。我希望能够在后期补间之一的构造中使用早期补间之一产生的值。

是否可以访问之前在时间轴中完成动画的元素的值?

更新:

我最初提供的示例非常粗糙。我已经更新它以更准确地反射(reflect)我遇到的问题。

彩色 div 的大小取决于视口(viewport),其中的内容根据该大小流动。单击其中一个会开始一个动画,该动画会展开单击的 div 以填充视口(viewport)并删除未单击的 div。这种调整大小会导致文本重排以适应新空间。

然后 div.status(之前绝对位于页面底部之外)动画化到所选彩色 div 下方。不幸的是,用于计算其新 top 值的高度是所选彩色 div 在动画和随后的内容重排之前的高度。

var timeline = new TimelineLite();

$('.clickable').click(function(){
  var $selected = $(this);
  var $notSelected = $('.clickable').not($(this));
  $selected.addClass('selected');
  $notSelected.addClass('not-selected');
  
  timeline
  .add("optionSelected")
  .to(
    $selected,
    0.5,
    { "width":"96%" },
    "optionSelected"
  )
  .to(
    $notSelected,
    0.5,
    {
      "width":"0%",
      "padding":"0"
    },
    "optionSelected"
  )
  .to(
    $(".status"),
    0.5,
    {
      "top":$('.selected').height()
    }
  )
})
body{
  position:relative;
  height:100vh;
  overflow:hidden;
  background-color:cornsilk;
}
section{
  background-color:#ddd;
  display:flex;
  align-items: flex-start;
}
div{
  width: 30%;
  padding:2%;
  color: #FFF;
  display:inline-block;
}
.clickable{cursor:pointer;}
.status{
  width:96%;
  position:absolute;
  top:100%;
  left:0;
  background-color:#FFF;
  color:black;
  border:1px solid black;
}
.blue{background-color:blue;}
.green{background-color:green;}
.purple{background-color:purple;}
.not-selected{ 
  white-space: nowrap;
  overflow:hidden;
}
<body>
  <script src="https://cdnjs.cloudflare.com/ajax/libs/gsap/1.19.0/TweenMax.min.js"></script>
  <script src="https://ajax.googleapis.com/ajax/libs/jquery/1.11.1/jquery.min.js"></script>
  <section>
    <div class="blue clickable"><strong>Clickable</strong> - Lorem ipsum dolor sit amet, consectetur adipiscing elit. Dignissim tortor, sit amet vulputate augue lectus vel felis. Cras ac ex vel ligula porta laoreet. 
    </div>
    <div class="green clickable"><strong>Clickable</strong> - Lorem ipsum dolor sit amet, consectetur adipiscing elit. Donec ultrices, est ut sollicitudin gravida, velit erat dignissim tortor, sit amet vulputate augue lectus vel felis. Cras ac ex vel ligula porta laoreet. Mauris lorem tellus, convallis ac tincidunt eu, efficitur consequat turpis.</div>
    <div class="purple clickable"><strong>Clickable</strong> - Lorem ipsum dolor sit amet, consectetur adipiscing elit. Donec ultrices, est ut sollicitudin gravida, velit erat dignissim tortor, sit amet vulputate augue lectus vel felis. Cras ac ex vel ligula porta laoreet.</div>

    <div class="status">Status</div>
  </section>
</body>

最佳答案

尝试从函数中返回所需的高度作为回调。我认为直到 .selected 元素的动画到达链中的 to() 之后才会执行。

此外 height() 不包括填充或边距,因此您最终会遇到 .status 重叠,请尝试 .outerHeight()相反。

工作示例:

http://codepen.io/jonwheeler/pen/jAvRZZ?editors=0110

关于javascript - 从 Greensock 时间轴中以前的动画元素访问更新的 CSS 值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38731708/

相关文章:

javascript - 维护 Chrome 打包应用程序的登录状态

javascript - 为什么在以下情况下调用不会转到 jQuery 函数?

asp.net-mvc - 如何获取数据表中选定的表格单元格值

CSS将过滤器(svg)应用于firefox中的DIV

html - 在我的 index.html 中直接使用 SCSS/SASS

html - 为什么我的内容在兼容模式下会消失在标题后面?

javascript - Dashing 仪表板链接小部件

javascript - jQuery html() 不适用于字符串

javascript - 使用 JavaScript 隐藏和显示测验问题

javascript - Sendgrid(Node JS)将联系人添加到自定义营销列表