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

UniApp 小程序嵌套 H5 页面显示隐藏监听实践

UniApp 小程序嵌套 H5 页面显示隐藏监听实践

一、背景介绍

在小程序嵌套 H5 页面的场景中,经常需要监听页面的显示和隐藏状态,以便于处理一些特定的业务逻辑,如暂停/继续定时器、暂停/继续视频播放等。

二、实现方案

1. 页面可见性 API

首先定义页面可见性属性:

let hiddenProperty = ('hidden' in document) ? 'hidden': ('webkitHidden' in document) ? 'webkitHidden': ('mozHidden' in document) ? 'mozHidden' : null;
2. 监听页面状态变化
methods: {initVisibilityListener() {if (hiddenProperty) {let visibilityChangeEvent = hiddenProperty.replace(/hidden/i, 'visibilitychange');document.addEventListener(visibilityChangeEvent, () => {this.pageVisibility();});}},pageVisibility() {if (document[hiddenProperty]) {// 页面隐藏时的处理this.handlePageHidden();} else {// 页面显示时的处理this.handlePageVisible();}},handlePageHidden() {// 清理定时器等操作if (this.timer) {clearTimeout(this.timer);this.timer = null;}// 其他需要暂停的操作},handlePageVisible() {// 重新初始化数据this.initData();// 其他需要恢复的操作}
}
3. 生命周期中注册监听
mounted() {this.initVisibilityListener();
},beforeDestroy() {// 清理监听器if (hiddenProperty) {let visibilityChangeEvent = hiddenProperty.replace(/hidden/i, 'visibilitychange');document.removeEventListener(visibilityChangeEvent, this.pageVisibility);}
}

三、应用场景

定时器控制

pageVisibility() {if (document[hiddenProperty]) {// 页面隐藏,清除定时器if (this.timer) {clearTimeout(this.timer);this.timer = null;}} else {// 页面显示,重新获取数据this.getData();}
}

视频播放控制

pageVisibility() {if (document[hiddenProperty]) {// 页面隐藏,暂停视频this.$refs.video.pause();} else {// 页面显示,继续播放this.$refs.video.play();}
}

四、总结

通过合理使用页面可见性 API,我们可以:

  1. 优化用户体验
  2. 提高应用性能
  3. 避免不必要的资源消耗
  4. 更好地管理页面状态
http://www.dtcms.com/a/163295.html

相关文章:

  • CentOS NFS共享目录
  • 关于3D的一些基础知识
  • Objective-C Block 底层原理深度解析
  • WEBSTORM前端 —— 第2章:CSS —— 第4节:盒子模型
  • phpstudy修改Apache端口号
  • (开源)视频画面增强模型:Ev-DeblurVSR (可以解决视频画面不清晰的问题)
  • C++之类和对象:构造函数,析构函数,拷贝构造,赋值运算符重载
  • 从Transformer原理角度来看,prompt设置输出字数限制会生效的原因
  • 8.idea创建maven项目(使用Log4j日志记录框架+Log4j 介绍)
  • Java后端程序员学习前端之html
  • 关于浏览器对于HTML实体编码,urlencode,Unicode解析
  • gem5-gpu 安装过程碰到的问题记录 关于使用 Ruby + Garnet
  • RabbitMQ 启动报错 “crypto.app“ 的解决方法
  • 余额分账和代付有什么区别?
  • AVL树左旋右旋的实现
  • Error: error:0308010C:digital envelope routines::unsupported 高版本node启动低版本项目运行报错
  • Android启动应用时屏蔽RecyclerView滑动,延时后再允许滑动,Kotlin
  • 【免费下载】1985-2023年全国土地利用数据
  • GD32F407单片机开发入门(十七)内部RTC实时时钟及实战含源码
  • 请简述一下什么是 Kotlin?它有哪些特性?
  • React Native 太慢:kotlin-gradle-plugin-2.0.21-gradle76.jar 下载太慢
  • git学习之git常用命令
  • MATLAB函数调用全解析:从入门到精通
  • 【最新 MCP 战神手册 08】工具使用详解:实现 AI 行动
  • Spring MVC 进阶 - 拦截器、异常处理、数据校验
  • 【东枫电子】AI-RAN:利用人工智能驱动的计算基础设施变革 RAN
  • [逆向工程]如何理解小端序?逆向工程中的字节序陷阱与实战解析
  • 【XR空间传送】深入理解Unity中 XR Interaction Toolkit 的 MatchOrientation 用法与使用场景(空间传送、视角切换)
  • 【LeetCode 560】和为K的子数组(前缀和+哈希)
  • JSON-RPC 2.0 规范中文版——无状态轻量级远程过程调用协议