我正在用 SvelteKit 和 Gsap + scrollTrigger 构建一个简单的网站。结构是这样的:Startpage / About / Services / Contact
在整个站点中,我在 SVG、文本和其他元素上使用了许多简单的动画。一切似乎都很好,但是当我在页面之间来回移动时,我注意到网页真的变慢了,最终开始崩溃。刷新浏览器后一切都很好......(直到我再次开始在页面之间导航)。我发现我需要在页面转换时终止 GSAP ScrollTriggers 并再次重新初始化它们。
所以我杀死了scrollTriggers,但出现了一个新问题:当我开始导航(例如,从/about 到/contact)并返回到之前访问过的页面时 - onMount 不再被调用并且我的所有动画都没有开始...我在所有路由页面上都使用这样的 gsap:
<script>
// GSAP
import { gsap } from 'gsap';
import { ScrollTrigger } from 'gsap/dist/ScrollTrigger.js';
import { onMount, onDestroy } from 'svelte';
const init = () => {
// Title + Circles
let tlHero = gsap.timeline({
defaults: {duration: 1, ease: "power2"},
scrollTrigger: {
trigger: ".index h1",
toggleActions: "restart none restart none",
}
});
tlHero
.from(".index h1", {x: 40, delay:0.3)
.from(".hero-c2", {duration: 0.8, scale:0.1, transformOrigin:"50% 100%"})
.from(".hero-c3", {y:-31, delay:0.3})
.from(".hero-c1", {y:32}, "-=1")
// Titles - .lists sections
const sections = gsap.utils.toArray('.lists section');
sections.forEach((section) => {
gsap.from(section, {
x:100,
duration: 2,
stagger:5,
ease: 'power4',
opacity:0,
scrollTrigger: {
trigger: section,
toggleActions: 'restart none none reverse',
start: 'top 80%',
}
});
});
// … and here several other animations…
};
onMount(() => {
gsap.registerPlugin(ScrollTrigger);
init();
});
onDestroy(() => {
ScrollTrigger.getAll().forEach(trigger => trigger.kill());
});
</script>
当我导航到其中一个页面时,如果 onMount 和 onDestroy 触发,我检查了 console.log。结果如下:
// Navigating to /routes/index.svelte
index.svelte-016bdddb.js:1 ScrollTriggers before mount 1
index.svelte-016bdddb.js:1 ScrollTriggers after mount 3
// Navigating to /routes/contact/index.svelte
index.svelte-016bdddb.js:1 ScrollTriggers before mount 5
index.svelte-016bdddb.js:1 ScrollTriggers after mount 7
index.svelte-a4654da6.js:1 ScrollTriggers before mount 9
index.svelte-a4654da6.js:1 ScrollTriggers after mount 10
index.svelte-016bdddb.js:1 ScrollTriggers before destroy 10
index.svelte-016bdddb.js:1 ScrollTriggers after destroy 0
index.svelte-016bdddb.js:1 ScrollTriggers before destroy 0
index.svelte-016bdddb.js:1 ScrollTriggers after destroy 0
我不是编程专家,SvelteKit 与 GSAP 相结合似乎是我项目的绝佳选择……但现在我被困住了:-/
我将不胜感激任何帮助