addEventListener 的使用

例如监听页面滚动条的位置

1、html 中定义(获取div高度)

<div class="content" >
  <div class="approval-list" ref="scrollBox"> </div>
</div>

2、mounted() 方法

【注 1】监听div滚动条的高度:创建一个监听就要记得销毁,否则多次加载导致页面奔溃

  mounted () {
    this.$nextTick(() => {
      this.$refs.scrollBox.addEventListener('scroll', this.handleScroll)
    })
  },

【注 2】由于 mounted() 阶段 dom 节点才被渲染,因此如果初始化高度、获取高度等操作应该写在 mounted() 方法中

 let h1 = this.$refs.scrollBox.offsetHeight  // 500 (没有单位)
 let h2 = this.$refs.scrollBox.style.height  // 500px (以‘px’为单位)

 

3、methods() 方法

  methods: {
    // 获取滚动条高度
    handleScroll() {
      localStorage.setItem('scrollBox', this.$refs.scrollBox.scrollTop)
    },
    // 还原滚动条高度
    getBeforeScroll() {
      let _this = this
      _this.$nextTick(function () {
        var scrollTop = Number(localStorage.getItem("scrollBox"))
        if (scrollTop) {
          this.$refs.scrollBox.scrollTop = scrollTop
        }
      });
    },
  },

4、addEventListener事件 注册了就一定要记得销毁,在 beforeDestroy() 中销毁事件。

 beforeDestroy () {
    this.$refs.scrollBox.removeEventListener('scroll', 
    this.handleScroll)
  }

这是对document的监听事件是一个全局的操作,如果没有手动的去取消这个监听那么它的监听机制也就一直存在着,这样每次进入这个页面也就意味着都会增加一次对它的监听。多次之后自然页面也就会卡死了。

 

5、【注】如果addEventListener()事件 监听方法不执行

检查几个问题:

1. 监听滚动的元素结点是否给了height和overflow:scroll

2. 监听滚动的元素结点的父元素结点是否设置了高度

例如css代码如下:

<style scoped>
.content {
  height: 100%;
}
.approval-list {
  overflow-y: auto;
}
</style>

 

 

posted @ 2019-09-25 11:17  miny_simp  阅读(1444)  评论(0编辑  收藏  举报