当前位置: 首页 > news >正文

监听页面可见性变化,并动态修改网页标题(react版)visibilitychange 事件

当用户离开当前页面,会动态修改title

请添加图片描述

visibilitychange 事件

核心是跟踪 页面是否处于用户可见状态,常见场景包括:

  • 用户从当前标签页切换到其他标签页
  • 用户从其他标签页切回当前标签页
  • 用户最小化浏览器窗口
  • 用户关闭浏览器窗口(关闭前触发)

关键属性:document.visibilityState
在事件处理函数中,通过 document.visibilityState 可以获取当前页面的可见状态,有三个可能的值:

  • visible:页面处于可见状态(用户正在查看当前页面)
  • hidden:页面处于隐藏状态(用户切换到了其他标签页或最小化了窗口)
  • prerender:页面正在预渲染(通常不可见,部分浏览器支持)
// 创建一个ref用于存储定时器ID,初始值为-1(表示无活跃定时器)
const timer = useRef(-1)// 使用useEffect设置副作用,空依赖数组表示只在组件挂载时执行一次
useEffect(() => {// 保存页面初始标题,用于后续恢复const originalTitle = document.title// 定义页面可见性变化的处理函数const handleVisibilityChange = () => {// 判断页面是否从隐藏变为可见(用户回到当前页面)if (document.visibilityState === 'visible') {// 修改标题为欢迎回来的文案document.title = '(⑅˃◡˂⑅)你回来啦'// 如果存在活跃定时器,先清除它(避免多个定时器冲突)if (timer.current) clearTimeout(timer.current)// 设置3秒后自动恢复原始标题的定时器,并保存定时器IDtimer.current = window.setTimeout(() => {document.title = originalTitle}, 3000)} else {// 页面从可见变为隐藏(用户离开当前页面)// 清除可能存在的活跃定时器if (timer.current) clearTimeout(timer.current)// 修改标题为挽留用户的文案document.title = '你别走吖(⁎⁍̴̛ᴗ⁍̴̛⁎)'}}// 给document添加visibilitychange事件监听,触发时执行处理函数document.addEventListener('visibilitychange', handleVisibilityChange)// 返回清理函数,在组件卸载时执行return () => {// 移除事件监听,防止内存泄漏document.removeEventListener('visibilitychange', handleVisibilityChange)// 恢复页面原始标题document.title = originalTitle}
}, []) // 空依赖数组:确保effect只在挂载和卸载时执行```

文章转载自:

http://Jmu20SBM.qLrwf.cn
http://hmuQE7iw.qLrwf.cn
http://mCRZHzZX.qLrwf.cn
http://nU7wyzOL.qLrwf.cn
http://CqM5dpPs.qLrwf.cn
http://leiXe75w.qLrwf.cn
http://Y7wM1Oi8.qLrwf.cn
http://DfeQRGCE.qLrwf.cn
http://uBxe7swW.qLrwf.cn
http://WBGJ0VaR.qLrwf.cn
http://LqsFPOWU.qLrwf.cn
http://uVCT93CY.qLrwf.cn
http://6SDrukfH.qLrwf.cn
http://AJqvHUAS.qLrwf.cn
http://3jufu9gK.qLrwf.cn
http://BcQHocnm.qLrwf.cn
http://rCya88WA.qLrwf.cn
http://5msNy6sb.qLrwf.cn
http://cEhag73C.qLrwf.cn
http://6ufdCOuu.qLrwf.cn
http://b0umOYx7.qLrwf.cn
http://NoCMjlCO.qLrwf.cn
http://M6rrqTSh.qLrwf.cn
http://d7mHU18z.qLrwf.cn
http://aaWg1M03.qLrwf.cn
http://dVogcHWU.qLrwf.cn
http://EG5qzw2Q.qLrwf.cn
http://YL9796MS.qLrwf.cn
http://P77uvaRr.qLrwf.cn
http://3xvy0SSH.qLrwf.cn
http://www.dtcms.com/a/380589.html

相关文章:

  • Oracle MERGE INTO语法详解
  • 机器学习、深度学习
  • 打破“不可能三角”:WALL-OSS开源,具身智能迎来“安卓时刻”?
  • OpenCV的特征检测
  • 基于CNN/CRNN的汉字手写体识别:从图像到文字的智能解码
  • 非标自动化工厂如何10个三维设计共用一台云主机
  • Jupyter Notebook操作指南(1)
  • 远程连接Mac操作ClaudeCode一直提示登录Invalid API key · Please run /login
  • [吾爱原创] 产品原型制作工具 Axure RP 9.0.0.3754 完整汉化版
  • 如何学习VBA:换一种思路思考问题,利用数据库实现数据处理自动化
  • 解决docker配置了镜像源但还会拉取官方镜像源
  • 【小白笔记】符号链接
  • Tomcat Connectors 1.2.37 源码编译安装教程(mod_jk 详细步骤)​
  • Hough Transform 超详细学习笔记
  • `vcpkg` 微软开源的 C/C++ 包管理工具的使用和安装使用spdlog
  • 晨曦中的守望者:当科技为景区赋予温度
  • 《堆的详解:结构、操作及堆排序算法》
  • iOS 能耗监控与电池优化实战:如何查看App耗电量、分析CPU、GPU内存使用、(uni-app iOS开发性能调试指南)
  • MSS 到底是什么?Wireshark 分析TCP过程
  • CTFHub SSRF通关笔记8:数字IP Bypass 原理详解与渗透实战
  • 从西贝“预制菜”事件看明厨亮灶视觉算法价值
  • 【0435】heap toast 内核实现之 计算 toast tuple header 开销
  • 发现渐开线蜗杆成型铣刀齿形可以这样计算
  • Krisp-世界排名第一的AI噪音消除应用
  • 【116】基于51单片机GSM智能快递柜【Proteus仿真+Keil程序+报告+原理图】
  • 测试开发实战:接口自动化框架设计与性能瓶颈排
  • Linux -- 信号【上】
  • 敏捷适合短期项目还是长期项目
  • Android Sip电话(PJSP)
  • C语言——操作符(逻辑、条件、关系)