2 回答
TA贡献1784条经验 获得超9个赞
看起来你的逻辑有点过于复杂了。就像 Bravo 在评论中提到的那样,您需要对处理程序的静态引用才能解除绑定:您可以简单地将其声明为组件方法。以下是更新代码的方法:
使用
onScroll()
方法来处理滚动的逻辑。您只需在添加/删除事件侦听器中传递此方法引用您应该将您的缓存
lastScrollTop
作为组件数据的一部分。3,然后,您只需在mounted()
生命周期钩子中添加滚动事件监听器,并在destroyed()
生命周期钩子中将其移除。
请参阅下面的更新代码:
const options = {
offset: -50
};
export default {
name: 'BarMenu',
data() {
return {
scrollingDirection: '',
lastScrollTop: 0,
}
},
computed: {
cssClasses() {
return {
hidden: this.scrollingDirection === 'down'
}
}
},
mounted() {
window.addEventListener("scroll", this.onScroll, false);
},
destroyed() {
window.removeEventListener("scroll", this.onScroll, false);
},
methods: {
scrollToIngredients() {
return this.$scrollTo(document.getElementById('ingredients-inside-content'), 600, options);
},
scrollToRecipes() {
return this.$scrollTo(document.getElementById('similar-recipes'), 600, options);
},
scrollToComments() {
return this.$scrollTo(document.getElementById('comments'), 600, options);
},
onScroll() {
let st = window.pageYOffset || document.documentElement.scrollTop;
if (st > this.lastScrollTop) {
this.scrollingDirection = 'down';
} else {
this.scrollingDirection = 'up';
}
this.lastScrollTop = st <= 0 ? 0 : st;
}
},
}
添加回答
举报