监听浏览器窗口可见状态,定时刷新,根据参数选择调用方法

判断浏览器处于活动可见状态就刷新数据

ngOnInit() {
	//页面初始化时加载数据
    this.loadData()
    window.addEventListener('visibilitychange', () => {
      if ('visible' === document.visibilityState) {
      //当浏览器标签页处于可见状态,重新加载数据
        this.loadData()
      }
    })
  }

参考地址

https://developer.mozilla.org/zh-CN/docs/Web/API/Document/visibilityState

Document.visibilityState (只读属性), 返回document的可见性, 即当前可见元素的上下文环境. 由此可以知道当前文档(即为页面)是在背后, 或是不可见的隐藏的标签页,或者(正在)预渲染.可用的值如下:

‘visible’ : 此时页面内容至少是部分可见. 即此页面在前景标签页中,并且窗口没有最小化.
‘hidden’ : 此时页面对用户不可见. 即文档处于背景标签页或者窗口处于最小化状态,或者操作系统正处于 ‘锁屏状态’ .
‘prerender’ : 页面此时正在渲染中, 因此是不可见的 (considered hidden for purposes of document.hidden). 文档只能从此状态开始,永远不能从其他值变为此状态.注意: 浏览器支持是可选的.
当此属性的值改变时, 会递交 visibilitychange (en-US) 事件给Document.

典型用法是防止当页面正在渲染时加载资源, 或者当页面在背景中或窗口最小化时禁止某些活动.

定时刷新

time = 10
finalFlushTime = 10

ngOnInit() {
    //当this.getRunCategory传递参数为1时,调用this.getRunningData(this.owner, this.category[0].id)
    //参数为2时调用this.getRunningData(this.owner, this.category[this.categoryIndex].id)
    //具体写法见getRunCategory()方法
    this.getRunCategory('1')
    window.addEventListener('visibilitychange', () => {
      if ('visible' === document.visibilityState) {
        this.getUserId()
        this.getRunCategory('2')
      }
    })
    this.countTime()
  }

//
  countTime() {
    if (this.time == 0) {
      this.getRunCategory('2');
    }
    this.time = this.time == 0 ? this.finalFlushTime : this.time;
    this.time -= 1;
    setTimeout(() => {
      this.countTime()
    }, 1000)
  }

//获取任务分类
  getRunCategory(timeRefresh) {
    this.service.getRunningCategory().subscribe(res => {
      //console.log('任务分类', res)
      if (res.length == 0) {
        this.hasdata = false
        return
      } else {
        this.hasdata = true
        this.category = res.filter(item => {
          return item.isDetail !== false
        }).map(item => {
          return item
        })
	//当this.getRunCategory传递参数为1时,调用this.getRunningData(this.owner, this.category[0].id)
    //参数为2时调用this.getRunningData(this.owner, this.category[this.categoryIndex].id)
          if (timeRefresh == '1') {
            this.getRunningData(this.owner, this.category[0].id)
          }else if(timeRefresh == '2'){
            this.getRunningData(this.owner, this.category[this.categoryIndex].id)
          }
      }
      this.cd.markForCheck()
    })
  }
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值