我使用机车进行平滑滚动,使用 gsap 进行动画。现在我想创建一个指令来动画一些错字。
我的应用程序包含此代码来创建平滑滚动并将其与 gsap 结合(从https://codepen.io/GreenSock/pen/zYrELYe复制)
const scroller = new this.$locomotiveScroll({
el: document.querySelector('.js_smoothscroller'),
smooth: true
});
scroller.on('scroll', () => {
this.$ScrollTrigger.update()
})
this.$ScrollTrigger.scrollerProxy('.js_smoothscroller', {
scrollTop(value) {
return arguments.length ? scroller.scrollTo(value, 0, 0) : scroller.scroll.instance.scroll.y
},
getBoundingClientRect() {
return { left: 0, top: 0, width: window.innerWidth, height: window.innerHeight
}
},
}
)
此代码工作正常
现在我想创建一些指令来轻松重用某些类型的动画。
function animateLetters() {
console.log('inviewport')
}
const init = {
bind: (el, binding, vnode) => {
...
vnode.context.$ScrollTrigger.create({
trigger: '.heading',
scroller: ".js_smoothscroller",
onEnter: () => { console.log('inviewport') }
onUpdate: () => { console.log('doesn't get updated')},
start: "top bottom",
end: "top top"
})
}
}
Vue.directive('char-animation', init)
该指令在加载时执行一次,但不会触发 onUpdate 或 onEnter 函数。
如果我调整窗口大小,onUpdate 函数会被触发,但不会在滚动时触发。
更新 addet 一个小演示 https://codesandbox.io/s/gsap-scrolltrigger-ihfbg?file=/directives/char-animation.js
我错过了什么?