我一直在努力使用机车滚动和 gsap scrollTrigger 和 Scrollproxy 在我的 Nuxtjs 项目上实现平滑滚动效果。但是在我的中途遇到了一些我无法回头的有线问题。我在我的 Nuxt 项目中使用 Typescript 和 Class Component。
问题是
- 更改路线滚动效果被破坏并且页面高度变得如此之高。然后必须重新加载该特定页面才能正常工作。需要一个路线更改解决方案,我在此设置中没有任何线索。
这是代码
import { gsap } from "gsap";
import ScrollTrigger from "gsap/ScrollTrigger";
import LocomotiveScroll from 'locomotive-scroll';
gsap.registerPlugin(ScrollTrigger)
const scrollContainer = document.querySelector('[data-scroll-container]')
const bodyScrollBar = new LocomotiveScroll({
el: scrollContainer,
smooth: true,
initPosition: { x: 0, y: 0 },
lerp: 0.12,
getSpeed: true,
getDirection: true,
offset:["15%",0],
tablet: {
smooth: true,
direction: 'vertical',
gestureDirection: 'vertical',
breakpoint: 1024
},
smartphone: {
smooth: true,
direction: 'vertical',
gestureDirection: 'vertical'
}
})
bodyScrollBar.on('scroll', ScrollTrigger.update)
ScrollTrigger.scrollerProxy('.scroller-wrapper', {
scrollTop(value) {
if(arguments.length) {
return arguments.length ?
bodyScrollBar.scrollTo(value, 0, 0) :
bodyScrollBar.scroll.instance.scroll.y
// return bodyScrollBar.scrollTop = value
}
},
getBoundingClientRect() {
return {
left: 0, top: 0,
width: window.innerWidth,
height: window.innerHeight
}
},
pinType: scrollContainer.style.transform ? "transform" : "fixed"
})
ScrollTrigger.addEventListener('refresh', () => bodyScrollBar.update())
ScrollTrigger.addEventListener('resize', () => bodyScrollBar.update())
ScrollTrigger.refresh(true)
机车具有视差和其他效果的实例,例如
data-scroll
和data-scroll-speed='1'
。刷新页面时它可以正常工作,但是当我更改路线时它不起作用。你可以在我的demo-project-link上看到它。想要滚动页面上具有
overflow-scroll
固定的特定部分height
。但是,当尝试滚动整个页面时,将会滚动,这是意料之外的。查看从导航转到**scrollable-div**
菜单。
这部分我想以不同的方式滚动,当我滚动这部分时需要停止整个页面滚动。
需要您的支持和解决方案,因为我遇到了这些有线问题。任何解决方案都将是合适的。