- jquery.fullPage在鼠标快速滚动滚动时候(即从一个页面跳转到另一个页面),如果我不用其本身默认的页面滚动事件,而是把跳转单独拿出来,如下
/* 父组件中 */
clickSide(num) {
const index = $(this).index();
$.fn.fullpage.moveTo(num + 1);
},
然后通过provide,inject暴露给后代组件,给它们调用,规则如下,触底或者触顶的时候触发跳转。
这里因为需要等到页面内部滚动完成再跳转,所以我用@scroll.stop @wheel.stop屏蔽了原本的滚动事件(这里不能去除,去除这里会让内部元素无法滚动而直接跳转)
/* 子组件中,这里子组件有多个 zhuyeGridWheel是wheel监听事件 */
zhuyeGridWheel(e){
console.log(this.$refs.grid.scrollTop); //滚动高度
console.log(this.$refs.grid.scrollHeight); //滚动部分的总高度
console.log(this.$refs.grid.clientHeight); //显示部分的高度
// 向下滚动
if(e.deltaY > 0 &&
this.$refs.grid.scrollTop + this.$refs.grid.clientHeight >= this.$refs.grid.scrollHeight - 1
){
console.log('去下一个');
this.clickSide(2)
}
// 向上滚动
if(e.deltaY < 0 &&
this.$refs.grid.scrollTop == 0
){
console.log('去上一个');
this.clickSide(0)
}
},
现在问题是,如果我从第一个页面跳转到第二个页面,中途鼠标滚轮快速滚动且只动滚轮的时候,如果我不等待一下或者移动一下鼠标,这里就还会继续触发上一个页面组件的方法 this.clickSide,
比如:我从 页面0 跳转到 页面1 ,页面0 会先执行 this.clickSide(1) ,这时候页面已经跳转到下一个,如果我在跳转的过程中,不等待一下或者移动一下鼠标,页面依旧会执行 页面0 中的 this.clickSide(1) 即使 页面1 依旧满足触底跳转条件,而不是 页面1 中的 this.clickSide(2)
- 我在这里尝试在跳转的时候用this.$refs.grid.removeEventListener("wheel", this.zhuyeGridWheel);卸载,但是并没有什么用,移除了之后,页面1中的滚动监听也不会触发 也就是说,即便没有这个监听,跳转到下一个页面的时候,也根本不会触发下一个页面的监听
-