首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何分别监听x scroll和y scroll滚动事件

如何分别监听x scroll和y scroll滚动事件
EN

Stack Overflow用户
提问于 2018-11-12 17:13:34
回答 1查看 2K关注 0票数 3

我想监听scroll事件,并通过两个scroll的两个函数来处理它们。

一个需要throttleTime()来节省资源,另一个不能使用throttleTime(),因为它需要立即触发,而且不会强制转换太多。

现在我添加了两个fromEvent来处理它们,但问题是,如果触发滚动事件,它们都会被触发。

代码语言:javascript
复制
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';
});

在我的组件中,这两个函数不会同时发生,那么我应该怎么做才能让它只触发一个函数,而防止另一个函数被执行呢?

EN

回答 1

Stack Overflow用户

发布于 2018-11-12 18:06:40

创建您的单个函数,但存储之前的X和Y滚动位置,以便您可以查看它们在两次调用之间是否发生了变化:

代码语言:javascript
复制
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);
代码语言:javascript
复制
<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>

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/53258982

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档