美文网首页
监听父元素的scroll事件

监听父元素的scroll事件

作者: 米诺zuo | 来源:发表于2021-04-02 20:33 被阅读0次

一开始,想着在 window / document 上绑定scroll事件,发现不起作用。

原因分析

  • 需要明白当前滚动的事件的是发生于哪个页面
  • 只有当父元素不够显示当前内容时浏览器才会发生滚动
  • 页面的滚动事件可能位于wrapper的父级身上,监听window也就不会触发事件

根据MDNscroll事件的描述:

冒泡: element的scroll事件不冒泡, 但是document的defaultView的scroll事件冒泡

当元素外面的scroll滚动时, 可能造成element位置移动

 onScrollEvent = () => {
   // do something when scroll 
  }

  bindScrollEvent = (ref) => {
    if (this.scrollNode.length) return
    let node = ref
    while (node.parentElement) {
      node = node.parentElement
      node.addEventListener("scroll", this.onScrollEvent);
      this.scrollNode.push(node)
    }
  }

  unbindScrollEvent = () => {
    for (const node of this.scrollNode) {
      node.removeEventListener("scroll", this.onScrollEvent);
    }
    this.scrollNode = []
  }

// 绑定scroll事件

 this.bindScrollEvent(this.demoRef.current)

// 移除scroll事件

this.unbindScrollEvent ()

相关文章

  • 监听父元素的scroll事件

    一开始,想着在 window / document 上绑定scroll事件,发现不起作用。 原因分析 需要明白当前...

  • JS - 单页面无限加载页面

    DEMO功能: 实现听过滚动无限刷新增添新元素 监听 scroll 事件 通过监听 scroll 事件,在页面滚动...

  • Javascript零碎之IntersectionObserve

    IntersectionObserver主要用于元素可见性的监听,比传统通过全局监听scroll事件去判断可见性无...

  • 事件委托

    概念 事件委托,将本来应该绑定到子元素的响应事件委托给父元素,让父元素担当事件监听的职务。 事件流 事件委托是基于...

  • e.target和e.currentTarget和this 三者

    e.target 是一种事件委托,通过事件冒泡机制,给父元素添加监听事件。当子元素触发事件,由于事件冒泡到父元素,...

  • VUE实现HTML页面滚动,标题实时刷新

    源码 原理 1.监听window scroll事件,利用debounce处理滚动事件2.获取所有card元素3.遍...

  • useInViewport

    简介 1 .观察元素是否在可见区域2 .使用场景: 3 .传统实现:监听scroll事件,调用目标元素的getBo...

  • 「JavaScript」 基础知识要点及常考面试题(四)---

    事件的委托 所谓的事件委托,通过监听一个父元素,来给不同的子元素绑定事件,减少监听次数,从而提升速度。eg: ne...

  • IntersectionObserver对象使用实现懒加载

    懒加载原理 传统的实现方法是,监听到scroll事件后,调用目标元素(绿色方块)的getBoundingClien...

  • 事件委托笔记

    事件委托原理:事件冒泡机制。 什么是事件委托: 事件委托——给父元素绑定事件,用来监听子元素的冒泡事件,并找到是哪...

网友评论

      本文标题:监听父元素的scroll事件

      本文链接:https://www.haomeiwen.com/subject/klfhhltx.html