【发布时间】:2024-04-22 20:35:01
【问题描述】:
我正在使用 HTML、CSS 和 JS 构建一个基本的网上银行应用程序。
到目前为止,我有最近的交易屏幕和一个简单的动画来打开每笔交易的描述。
我使用 GSAP 创建动画,使用 jQuery 处理元素。
但是,在打开描述窗口后,我遇到了一个问题。
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 语句根据描述窗口是打开还是关闭来决定播放哪个动画。
我是一名学习编码的设计师,我会接受任何我能得到的建议。
【问题讨论】:
-
我只想建议一件事:我认为您不需要在用户每次单击您的列表项时创建一个新的
TimelineMax({...});实例。 -
根据我的经验(我可能是错的)
TimelineMax的想法是在脚本中定义一次(在你的情况下,每个列表项一次),然后仅将播放头调整为 向前 或 向后。把它想象成一个带有拖拽句柄的视频,你创建一次,然后你只会播放、暂停、反转等。跨度> -
其实在这种特殊情况下,我认为使用
TweenMax也可能就足够了。 -
另外,您使用
delay的方式也有点奇怪。TimelineMax中有一个 position parameter,我认为在这种情况下你会发现它很有用。 -
感谢您的建议。我只需要将 TimelineMax 变量移到点击处理程序之外吗?
标签: javascript jquery html css gsap