Holla,当我关闭菜单并再次打开它时,我需要重置动画。我怎样才能做到这一点?动画仅在我打开菜单时才起作用。
CSSPlugin.defaultTransformPerspective = 600;
TweenMax.staggerFrom('ul#menu li', 1.5, {rotationX:-90, transformOrigin:"50% 0%", ease:Elastic.easeOut}, 0.4);
这是代码:http://codepen.io/hafsadanguir/pen/qOdaab。
感谢帮助!
最佳答案
this是您追求的结果吗?
JavaScript:
CSSPlugin.defaultTransformPerspective = 600;
var toggleMenu = $('.menu-toggle');
var logo = $('#logo');
var logotitle = $('#logotitle');
var listItems = $('ul#menu li');
var timeline = new TimelineMax({ paused: true, reversed: true });
timeline.fromTo([logo, logotitle], 0.6, { top: 300 }, { top: -50, ease: Power2.easeInOut });
timeline.staggerFromTo(listItems, 1.2, { autoAlpha: 0, rotationX: -90, transformOrigin: '50% 0%' }, { autoAlpha: 1, rotationX: 0, ease: Elastic.easeOut.config(1, 0.3) }, 0.1, 0.3);
toggleMenu.on('click', function() {
$(this).toggleClass('on');
timeline.reversed() ? timeline.play() : timeline.reverse();
});
一些事情已经改变,所以这里是细节:
首先,我没有看到需要
hidden
类,因此已将其从解决方案中删除。另外,在
on
元素上切换的.menu-section
类似乎也不必要。我删除了它,但保留了.menu-section
CSS规则中定义的属性。有趣的部分是JavaScript。
您基本上需要
TimelineMax
进行操作。从您在JavaScript设置面板中的导入情况来看,我假设您对
TimelineMax
(和TimelineLite
)的含义有所了解。无论如何,TimelineLite
是关于构建和管理TweenLite,TweenMax,TimelineLite和/或TimelineMax实例的序列的,而TimelineMax
是TimelineLite
的扩展,从而为其添加了更多功能。因此,代码中发生的事情是已经初始化了
TimelineMax
实例,向其中添加了补间,然后在单击.menu-toggle
按钮元素时,播放或倒转了该时间线。timeline.reversed() ? timeline.play() : timeline.reverse();
行基本上是if
条件的简化版本,它比其他任何东西都更取决于个人喜好,没有性能提升或我所知道的任何东西。在普通的if
子句中,它的编写应如下所示:if (timeline.reversed()) { timeline.play(); } else { timeline.reverse(); }
。正在检查的条件是
.reversed()
的timeline
属性。您会注意到,在初始化new TimelineMax(...)
时,我在其上设置了reversed: true
属性。它的作用是,在将所有补间添加到timeline
之后,它的行为就好像timeline
立即反转一样,使得timeline
的方向已被翻转。在上面共享的TimelineMax
文档链接中了解有关此内容的更多信息。.play()
和.reverse()
方法很容易解释,因为它们分别使timeline
前进或后退。就是这样。
希望这可以帮助。