首页 > 其他分享 >Vue -- 监听隐藏显示窗口后重新请求数据

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

时间:2022-08-31 11:37:23浏览次数:53  
标签:Vue visibilityState log -- callback window console document 监听

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

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

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

标签:Vue,visibilityState,log,--,callback,window,console,document,监听
From: https://www.cnblogs.com/lisaShare/p/16642375.html

相关文章

  • mysql安装及10061错误解决
    mysql出现10061错误解决方法 1.开始菜单->运行(cmd)->寻径到MySQL文件中的bin目录下如:D:\MySQL\mysql-5.6.24-win32\bin2.输入指令:mysqld--skip-grant-tables 回车//......
  • Power Shell
    Code:$Path="C:\Users\xxxx\Downloads\New";$filename="$Path\c.txt";#createfileifitdoesnotexistif(-not(Test-Path$filename)){New-Item-ItemTyp......
  • RL 学习曲线怎么看?
    https://zhuanlan.zhihu.com/p/342919579      好用的强化学习算法是? 超参数很容易调整或确定。SAC的rewardscaling可以在训练前直接推算出来。PPO超......
  • 222怎么写一个自己的gym环境
    首先我按照遗传算法纯python写好了强化学习算法只要把这个移植到gym框架就好  主要看了这两个网址https://blog.csdn.net/weixin_44597347/article/details/12430......
  • .Net Core调试Liunx
    场景:之前做.netcore项目,只能本机调试测试完,发布后放在liunx上。但这个时候经常会因为环境问题,配置问题等,导致程序出现莫名其妙的bug,有的日志还记录的不完善,很难找到......
  • 微服务的优缺点及实践反思
    最早接触微服务系统来自当时我们当时技术主管LR,当时使用的dubbo-zookeeper,不过这套现在不经常用了,大多数公司使用SpringCloud,而初次接触SpringCloud是我们当时信息......
  • 8.31
    全过程考核,好耶 第一章:物联网概论1.衣食住行带来的改变物联网的技术:1..普适运算:随时随地可以进行的运算,物联网智能的理论模型,自然的交互,计算设备小到毫米和纳米级2.......
  • msf攻击android
    msf攻击android[1]1.msf生成androidapk文件msfvenom-pandroid/meterpreter/reverse_tcplhost=<ip地址>lport=<端口>R>test.apk-pandroid/meterpreter/revers......
  • [笔记] 兰道定理 Landau's Theorem
    兰道定理的内容:一个竞赛图强连通的充要条件是:把它的所有顶点按照入度d从小到大排序,对于任意\(k\in[0,n-1]\)都不满足\(\sum_{i=0}^kd_i=\binom{k+1}{2}\)。兰道定......
  • mysql用户重命名
    如何修改mysql默认账户名root?首先说一下为什么我要改这个root用户名,正常来说,数据库用户名又不经常更改,用啥都是应用,为什么非要改呢?因为最近在搞一个项目,本地数据库用户名为......