Top
Fork me on Gitee

Vue -- 监听隐藏显示窗口后重新请求数据

为什么会用到监听隐藏显示窗口的事件呢?

主要是因为页面中有计时器,窗口隐藏页面隐藏后,计时器暂停,这里使用了重新获取数据,重新启动倒计时的功能解决,所以需要监听事件。

methods: {
  visibilityState() {
    if (document.visibilityState === 'visible' || event.persisted) {
      console.log('欢迎回来!')
      // this.$router.go(0)
      this.onLoad()
      // do something
      // 继续
    }
    // if (document.visibilityState === "hidden") {
    // console.log("不要走!")
    // do something else
    // 暂停
    // }
  }
},
mounted() {
 window.addEventListener('visibilitychange', this.visibilityState)
 window.addEventListener('pageshow', this.visibilityState)
},
beforeDestroy() {
  window.removeEventListener('visibilitychange', this.visibilityState)
  window.removeEventListener('pageshow', this.visibilityState)
}

下面的函数封装,监听效果不理想,最终使用的是上面的方法

mounted() {
 this.pageListener(this.handlePage, true)
},
beforeDestroy() {
 this.pageListener(this.handlePage)
},
methods: {
  handlePage(event) {
    console.log(event, document.visibilityState)
    if (document.visibilityState === 'visible' || event.persisted) {
      console.log('欢迎回来!', event.persisted)
      this.onLoad()
    }
  },
  pageListener(callback, addListener) {
    if (addListener) {
        console.log('pageListener addListener')
        window.addEventListener('pageshow', callback, false);
        document.addEventListener('visibilityChange', callback, false);
    } else {
      console.log('pageListener remove')
      // 移除页面监听
      this.pageShowListener(callback, false);
      this.pageVisibilityListener(callback, false);
    }
  },
  pageShowListener(callback) {
    window.removeEventListener('pageshow', callback)
  },
  pageVisibilityListener(callback) {
    document.removeEventListener('visibilitychange', callback)
  }
}
posted @ 2022-08-31 11:21  lisashare  阅读(852)  评论(0编辑  收藏  举报