gpt4 book ai didi

javascript - 如何单独监听 x 滚动和 y 滚动的滚动事件

转载 作者:行者123 更新时间:2023-12-04 15:52:35 25 4
gpt4 key购买 nike

我想监听滚动事件并通过两个函数处理它们进行两个滚动。
需要一个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';
});
在我的组件中,这两个功能不会同时发生,那么我应该怎么做才能让它只触发一个功能并防止另一个功能被执行?

最佳答案

创建您的单个函数,但存储以前的 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>

关于javascript - 如何单独监听 x 滚动和 y 滚动的滚动事件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53258982/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com