vue中使用visibilitychange事件来获取页面当前可见性

news/2024/10/19 13:51:06/

前言

在系统中,如果有打开新页面进行相关操作,若是有关联操作就需要通过判断页面的可见性来进行后绪的操作

一、触发visibilitychange变更的情况

页面的可见性有三个层面

  • 页面可见时,用户关闭 Tab 页或浏览器窗口。
  • 页面可见时,用户在当前窗口前往另一个页面。
  • 页面不可见时,用户或系统关闭浏览器窗口。

这三种情况,都会触发visibilitychange事件。前两种情况,该事件在用户离开页面时触发;最后一种情况,该事件在页面从可见状态变为不可见状态时触发。

二、 hidden与visibilityState

hidden与visibilityState 都是 document对象的属性

document.visibilityState

返回一个字符串,表示页面当前的可见性状态,共有三个可能的值。

  • hidden:页面彻底不可见。
  • visible:页面至少一部分可见。
  • prerender:页面即将或正在渲染,处于不可见状态。

只要页面可见,其值就是true,什么情况下是hidden呢?

  • 浏览器最小化。
  • 浏览器没有最小化,但是当前页面切换成了背景页。
  • 浏览器将要卸载(unload)页面。
  • 操作系统触发锁屏屏幕。

document.hidden

只读,返回一个布尔值,表示当前页面是否可见
当document.visibilityState属性返回visible时,document.hidden属性返回false;其他情况下,都返回true
推荐使用document.visibilityState来判断页面的可见性

三、visibilitychange 事件

只要document.visibilityState属性发生变化,就会触发visibilitychange事件。因此,可以通过监听这个事件(通过document.addEventListener()方法或document.onvisibilitychange属性),跟踪页面可见性的变化

四、代码示例

<template><div ref="refDV">测试visibilitychange<el-button type="primary" @click="handleAddListener">启用</el-button><el-button type="danger" @click="handleremoveListener">销毁</el-button></div>
</template>
<script>
function gethiddenStatus() {var isHidden = document.hidden;if (isHidden) {// 失去焦点document.title = '小主,快回来';console.log('visibilitychange--lost', document.visibilityState);} else {// 未失去焦点document.title = '激活窗户';console.log('visibilitychange--com', document.visibilityState);}
}
export default {mounted() {this.handleAddListener();},destroyed() {this.handleremoveListener();},methods: {// 开启handleAddListener() {document.addEventListener('visibilitychange', gethiddenStatus, true);},// 手动销毁handleremoveListener() {document.removeEventListener('visibilitychange', gethiddenStatus, true);}}
};
</script>

输出结果参考:
在这里插入图片描述
销毁事件后,不再触发visibilitychange


http://www.ppmy.cn/news/2729.html

相关文章

ffmpeg 中 aresample filter 和 scale filter 的创建

ffmpeg 中 &#xff0c;filter 的创建一般需要外部函数创建&#xff0c;可以参考 filter_audio.c sample&#xff1b; 一般 命令行 中&#xff0c;ffmpeg 和 ffplay 也会有相关的 filter 自动创建&#xff1b; ffmpeg 中 filter 的概念 和 directshow 中的比较接近&#xff1…

济南双软认证认定条件

一、认定软件企业的主要条件&#xff1a; &#xff08;1&#xff09;在中国依法设立的企业法人&#xff1b; &#xff08;2&#xff09;以计算机软件开发与生产、系统集成、应用服务及其他相应的技术服务为业务和主要经营收入&#xff1b; &#xff08;3&#xff09;拥有本企业…

Java+Netty+WebRTC、语音、视频、屏幕共享【聊天室设计实践】

背景 本文使用webtrc实现了一个简单的语音视频聊天室、支持多人音视频聊天、屏幕共享。 环境配置 音视频功能需要在有Https协议的域名下才能获取到设备信息&#xff0c; 测试环境搭建Https服务参考Windows下Nginx配置SSL实现Https访问&#xff08;包含openssl证书生成&…

西湖大学张岳老师NLP课程笔记1 Introduction

西湖大学张岳老师NLP课程笔记1 Introduction 参考资料 B站链接课程主页 《Natural Language Processing: A Machine Learning Perspective 》 csdn大佬笔记 https://blog.csdn.net/qq_45645521/category_11685799.html 文章目录西湖大学张岳老师NLP课程笔记1 Introduction1.…

【Day2】零基础学java--》牛客网刷题【字符集合】

大家好&#xff0c;我是良辰丫&#x1f49e;&#xff01;好久不见&#xff0c;一个多月没写博客了&#xff0c;都有些生疏了&#xff0c;学校的一些事情&#xff0c;考试&#xff0c;实训&#xff0c;各种实验&#xff0c;嘿嘿嘿&#xff01;其实也不能为自己找借口&#xff0c…

MySQL基础知识

一、数据库相关的简单命令 1、显示数据库 show databases&#xff1b; 2、创建数据库 create database 数据库名 character set 字符集 collate 指定字符集的校验规则&#xff1b; 注意&#xff1a; 数据库名应尽量避免使用关键字&#xff0c;如必须使用则需添加(倒引号);未…

JDK19都出来了~是时候梳理清楚JDK的各个版本的特性了【JDK11特性讲解】

JDK各个版本特性讲解-JDK11特性 lecture&#xff1a;波哥 一、JAVA11 概述 2018年9月26日,Oracle官方发布JAVA11.这是JAVA大版本周期变化后的第一个长期支持版本,非常值得关注.最新发布的JAVA11将带来ZGC HttpClient等重要特性,一共17个需要我们关注的JEP,参考文档http://openj…

多线程之线程同步(互斥锁、信号量、条件变量和读写锁​)

前言 多线程编程的时候经常会发生公共资源被抢夺而造成问题。 通常将“多个线程同时访问某一公共资源”的现象称为“线程间产生了资源竞争”或者“线程间抢夺公共资源”,线程间竞争资源往往会导致程序的运行结果出现异常,感到匪夷所思,严重时还会导致程序运行崩溃。 幸运地…