addEventListener 的使用

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

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

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

二、mounted() 方法app

【注 1】监听div滚动条的高度:建立一个监听就要记得销毁,不然屡次加载致使页面奔溃dom

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

【注 2】因为 mounted() 阶段 dom 节点才被渲染,所以若是初始化高度、获取高度等操做应该写在 mounted() 方法中this

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

 

三、methods() 方法spa

  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
        }
      });
    },
  },

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

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

这是对document的监听事件是一个全局的操做,若是没有手动的去取消这个监听那么它的监听机制也就一直存在着,这样每次进入这个页面也就意味着都会增长一次对它的监听。屡次以后天然页面也就会卡死了。htm

 

五、【注】若是addEventListener()事件 监听方法不执行blog

检查几个问题:事件

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

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

例如css代码以下:

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

 

相关文章
相关标签/搜索