我想监听scroll事件,并通过两个scroll的两个函数来处理它们。
一个需要throttleTime()来节省资源,另一个不能使用throttleTime(),因为它需要立即触发,而且不会强制转换太多。
现在我添加了两个fromEvent来处理它们,但问题是,如果触发滚动事件,它们都会被触发。
fromEvent(this.vscroll.nativeElement, 'scroll').pipe(throttleTime(200)).subscribe((e) => {
if (this.timer) {
clearTimeout(this.timer);
this.timer = null;
this.timer = setTimeout(() => {
this.updateShow();
}, 201);
} else {
this.timer = setTimeout(() => {
this.updateShow();
}, 201);
}
});
fromEvent(this.vscroll.nativeElement, 'scroll').subscribe((e) => {
(document.body.querySelector('#headerScroll') as HTMLElement).style.marginLeft = -this.vscroll.nativeElement.scrollLeft + 'px';
});在我的组件中,这两个函数不会同时发生,那么我应该怎么做才能让它只触发一个函数,而防止另一个函数被执行呢?
发布于 2018-11-12 18:06:40
创建您的单个函数,但存储之前的X和Y滚动位置,以便您可以查看它们在两次调用之间是否发生了变化:
var scrollY = 0;
var scrollX = 0;
function onScroll(){
var doc = document.documentElement;
if(doc.scrollLeft !== scrollX) {
scrollX = doc.scrollLeft;
//Put behaviour for X scroll here
$("p").text("X SCROLLED!");
}
if(doc.scrollTop !== scrollY) {
scrollY = doc.scrollTop;
//Put behaviour for Y scroll here
$("p").text("Y SCROLLED!");
}
}
window.addEventListener('scroll', onScroll);<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<div style="width:1000px; height:1000px; background-color:rebeccapurple; color:#FFF">
<p style="position: fixed;"></p>
</div>
https://stackoverflow.com/questions/53258982
复制相似问题