我正在使用GSAP TimelineLite作为滑块。我注意到当从一个标签更改为另一个标签时,滑块会有点混乱。
我使用Page Visibility API
解决了这个问题。如果页面未激活,则暂停时间线,一旦页面再次处于活动状态,时间线将恢复。
// page visibility
document.addEventListener('visibilitychange', handleVisibilityChange);
function handleVisibilityChange() {
if (document.hidden) {
tl.pause();
}
else {
tl.resume();
}
}
这样可以正常工作,但是如果更改滑块之间的选项卡,时间轴可能仍会“中断”。我想知道是否有类似于jQuery的finish
函数,而不是使用pause
。
我尝试使用addPause
功能,默认情况下会暂停时间轴末尾的时间轴。到目前为止似乎无法使它发挥作用。
function handleVisibilityChange() {
if (document.hidden) {
tl.addPause();
}
else {
tl.resume();
}
}
我还尝试在构造函数中使用onComplete
函数,在时间轴中使用最后一个元素,而不是在页面不活动时暂停时间轴。但是,在切换到另一个选项卡后似乎没有任何内容被触发,没有显示任何控制台日志。
构造
tl = new TimelineLite({
onComplete: function() {
if (document.hidden) {
console.log('timeline: pause');
tl.pause();
}
}
});
时间线结束:
tl
.to(activeSliderText, 0.5, { opacity: 0 })
.fromTo(activeSlider, 1, { x: 0 }, { x: animateTo, ease: Power1.easeInOut }, '-=0.25')
.fromTo(newSlider, 0.9, { x: animateFrom }, { x: 0, ease: Power1.easeInOut }, '-=1')
.fromTo(newSliderText, 0.5, { opacity: 0 }, { opacity: 1, onComplete: endOfTimeline }, '-=0.25');
var endOfTimeline = function() {
console.log('end of timeline');
if (document.hidden) {
console.log('timeline: pause');
tl.pause();
}
}