GSAP ScrollSmoother怎么获取滚动的像素和判断滚动的方向

由于ScrollSmoother可能会对滚动事件进行代理或修改,因此直接使用javascript原生的滚动事件监听可能不可靠,但是ScrollSmoother插件本身也没有提供直接获取滚动方向的方法,所以需要自行编写获取代码。

通常判断滚动方向的方法是通过比较当前滚动位置和上一次的位置,如果当前值大于上一次则是向下滚动,反之则是向上。但ScrollSmoother可能会对原生的滚动行为进行封装,所以使用ScrollSmoother或ScrollTrigger提供的API或方法获取滚动位置来判断滚动方向可以确保准确性。

ScrollSmoother实例有一个方法叫做scrollTop()可以获取当前的滚动位置,通过在onUpdate回调中这个值的变化,可以计算出滚动的方向。

思路整理:

通过 ScrollSmoother 的 scrollTop() 方法获取当前平滑处理后的滚动位置。

记录上一次的滚动位置,通过比较当前和上次的值判断方向。

在 ScrollSmoother 的 onUpdate 回调中实时监听滚动变化。

实现代码:

gsap.registerPlugin(ScrollTrigger, ScrollSmoother);

const smoother = ScrollSmoother.create({
  smooth: 2,
  effects: true,
  smoothTouch: 0.1,
  onUpdate: (self) => {
        const currentScrollY = self.scrollTop(); 
        const deltaY = currentScrollY - (self.lastScrollY || 0); 
        const direction = deltaY > 0 ? "down" : "up"; 
        self.lastScrollY = currentScrollY;
        if(direction == 'up'){
			alert('向上滚动');
        }else if(direction == 'down'){
			alert('向下滚动');
        }
    }
});

相当简单!

关键词: GSAP插件