GSAP ScrollTrigger - Pin 动画无法正常工作
GSAP ScrollTrigger - Pin animation not working correctly
我有一个名为 .listing__nav
的元素,我想将其固定在滚动条上。
当 .listing__nav
触及 window
的顶部时,我希望它固定并仅在 banner
元素出现时取消固定。
为此,我尝试了以下方法:
$(function() {
var action = gsap.set('.listing__nav', {
position: 'fixed',
paused: true
});
ScrollTrigger.create({
trigger: '.listing__nav',
start: 'top 0px',
onEnter: () => action.play(),
onLeaveBack: () => action.reverse(),
});
gsap.to('.listing__nav', {
ease: 'none',
scrollTrigger: {
trigger: ".banner",
scrub: 0.3,
end: 'bottom 110%',
markers: false,
}
});
});
:root {
--black: #000000;
--white: #FFFFFF;
--grey: #707070;
}
header {
background-color: var(--grey);
padding: 30px 0;
}
.spacer {
background-color: var(--black);
height: 300px;
}
.listing__nav {
padding: 80px 0 52px 0;
border-bottom: 1px solid var(--black);
}
.listing__spacer {
padding: 100px 0;
height: 1000px;
background-color: var(--black);
}
.banner {
background-color: var(--grey);
color: var(--white);
padding: 60px 0;
}
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.6.0/jquery.min.js" integrity="sha512-894YE6QWD5I59HgZOGReFYm4dnWc1Qt5NtvYSaNcOP+u1T9qYdvdihz0PPSiiqn/+/3e7Jo4EaG7TubfWGUrMQ==" crossorigin="anonymous" referrerpolicy="no-referrer"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/gsap/3.9.1/gsap.min.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/gsap/3.9.1/ScrollTrigger.min.js"></script>
<main>
<header>Header</header>
<div class="spacer"></div>
<div class="listing">
<nav class="listing__nav">Nav</nav>
<div class="listing__spacer">Spacer</div>
</div>
<div class="banner">Banner</div>
</main>
如您所见,.listing__nav
没有固定在预期的位置,而是固定在 window 的底部,导致出现故障。
已通过以下 JS
解决。
我正在创建两个不需要的 ScrollTriggers
。
$(function() {
ScrollTrigger.create({
trigger: '.listing__nav',
pin: true,
start: 'top top',
scrub: 0.5,
endTrigger: ".banner",
end: "top bottom",
pinSpacing: false,
markers: true
});
});
我有一个名为 .listing__nav
的元素,我想将其固定在滚动条上。
当 .listing__nav
触及 window
的顶部时,我希望它固定并仅在 banner
元素出现时取消固定。
为此,我尝试了以下方法:
$(function() {
var action = gsap.set('.listing__nav', {
position: 'fixed',
paused: true
});
ScrollTrigger.create({
trigger: '.listing__nav',
start: 'top 0px',
onEnter: () => action.play(),
onLeaveBack: () => action.reverse(),
});
gsap.to('.listing__nav', {
ease: 'none',
scrollTrigger: {
trigger: ".banner",
scrub: 0.3,
end: 'bottom 110%',
markers: false,
}
});
});
:root {
--black: #000000;
--white: #FFFFFF;
--grey: #707070;
}
header {
background-color: var(--grey);
padding: 30px 0;
}
.spacer {
background-color: var(--black);
height: 300px;
}
.listing__nav {
padding: 80px 0 52px 0;
border-bottom: 1px solid var(--black);
}
.listing__spacer {
padding: 100px 0;
height: 1000px;
background-color: var(--black);
}
.banner {
background-color: var(--grey);
color: var(--white);
padding: 60px 0;
}
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.6.0/jquery.min.js" integrity="sha512-894YE6QWD5I59HgZOGReFYm4dnWc1Qt5NtvYSaNcOP+u1T9qYdvdihz0PPSiiqn/+/3e7Jo4EaG7TubfWGUrMQ==" crossorigin="anonymous" referrerpolicy="no-referrer"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/gsap/3.9.1/gsap.min.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/gsap/3.9.1/ScrollTrigger.min.js"></script>
<main>
<header>Header</header>
<div class="spacer"></div>
<div class="listing">
<nav class="listing__nav">Nav</nav>
<div class="listing__spacer">Spacer</div>
</div>
<div class="banner">Banner</div>
</main>
如您所见,.listing__nav
没有固定在预期的位置,而是固定在 window 的底部,导致出现故障。
已通过以下 JS
解决。
我正在创建两个不需要的 ScrollTriggers
。
$(function() {
ScrollTrigger.create({
trigger: '.listing__nav',
pin: true,
start: 'top top',
scrub: 0.5,
endTrigger: ".banner",
end: "top bottom",
pinSpacing: false,
markers: true
});
});