基本上这是一个覆盖冲突,虽然前两个时间线可以毫无问题地共存,但是从您将它们添加到第三个时间线的那一刻起,它们就会受到该时间线的播放头的影响,它们的目标也是如此。此外,由于您有两个父时间线,在这种情况下,在“moveLeftRight”末尾创建的父时间线会覆盖所有其他时间线,因为所有时间线都会影响相同的目标和相同的属性“X”。如果你使用这个:
// Declare timelines
var moveRight = new TimelineMax({paused: true})
.fromTo(box, 1, {x: 0}, {x: 300});
var moveLeft = new TimelineMax({paused: true})
.fromTo(box, 1, {x: 300}, {x: 0});
var moveRightLeft = new TimelineMax({paused: true})
.add(moveRight.play())
.add(moveLeft.play());
/*var moveLeftRight = new TimelineMax({paused: true})
.add(moveLeft.play())
.add(moveRight.play());*/
moveRightLeft 代码有效,但使用单个按钮时会得到奇怪的结果。
一种解决方案是在按钮事件上创建主时间线,就像您通过将所有时间线创建为全局变量来避免此类冲突:
// Declare timelines
var moveRight = new TimelineMax({paused: true})
.fromTo(box, 1, {x: 0}, {x: 300});
var moveLeft = new TimelineMax({paused: true})
.fromTo(box, 1, {x: 300}, {x: 0});
// Handler functions
window.moveRight = function() { moveRight.play(0); }
window.moveLeft = function() { moveLeft.play(0); }
window.moveRightLeft = function()
{
var moveRightLeft = new TimelineMax()
.add(moveRight)
.add(moveLeft);
}
window.moveLeftRight = function()
{
var moveLeftRight = new TimelineMax()
.add(moveLeft)
.add(moveRight);
}
另一种选择是只使用一个父时间轴并使用 play(0) 和 reverse(0),如下所示:
// Declare timelines
var moveRight = new TimelineMax({paused: true})
.fromTo(box, 1, {x: 0}, {x: 300});
var moveLeft = new TimelineMax({paused: true})
.fromTo(box, 1, {x: 300}, {x: 0});
var moveRightLeft = new TimelineMax({paused:true})
.add(moveRight)
.add(moveLeft);
// Handler functions
window.moveRight = function() { moveRight.play(0); }
window.moveLeft = function() { moveLeft.play(0); }
window.moveRightLeft = function()
{
moveRightLeft.play(0);
}
window.moveLeftRight = function()
{
moveRightLeft.reverse(0);
}
我更新了你的小提琴:
http://jsfiddle.net/Zde5U/8/
问题是,如果您创建两个时间线,然后将这些时间线添加到另一个时间线,哪个时间线具有控制权?如果嵌套时间线可以控制其父时间线的播放头,那将是一团糟,如果parent 有 4 个嵌套的时间轴,每个时间轴都试图控制 parent 的播放头?,这是一个动画混乱。
罗德里戈。