【发布时间】:2021-06-11 18:37:24
【问题描述】:
我正在使用 BootstrapVue 中的 Sidebar 组件为我的应用程序呈现导航。
例如,我的导航中有 30 个菜单项,因此侧边栏中的内容会垂直滚动。我想绑定到该滚动事件以动态添加/删除一些类。
我尝试创建自定义滚动指令:
Vue.directive('scroll', {
inserted: function(el, binding) {
console.log('el', el);
let f = function(evt) {
if (binding.value(evt, el)) {
window.removeEventListener('scroll', f);
}
};
window.addEventListener('scroll', f);
}
});
...然后将其注册到我的 vue 文件中的组件:
<b-sidebar
v-scroll="handleScroll"
title="Menu"
shadow="lg"
backdrop
@change="$emit('sidebar-change')"
...
handleScroll() {
console.log('handleScroll');
},
指令被正确拾取,但我的 handleScroll 方法在主体滚动时触发,而不是侧边栏。
在我的指令中,我正在记录以查看它认为正在使用的元素:
<div tabindex="-1" class="b-sidebar-outer">...</div>
由于 Bootstrap 正在为叠加层动态创建标记,这就是父元素 -- 仔细观察,我相信我需要将我的指令附加到此:
<div class="b-sidebar-body">...</div>
那是看起来正在滚动的<div>。但是,由于它是在运行时生成的,我不知道如何挂钩。
我也尝试在组件上使用@native.scroll="myMethod"...也没有运气。
如何在我的侧边栏组件中监听滚动事件?感谢您的任何建议!
【问题讨论】:
标签: vue.js vuejs2 bootstrap-vue