当前位置: 首页 > 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. 更好地管理页面状态

相关文章:

  • 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?它有哪些特性?
  • 最高法强化涉新就业形态民事案件审判指导:推动出台司法解释
  • 阿迪达斯一季度营收增近13%,称美国加征关税对业绩带来不确定性
  • 我国成功发射卫星互联网低轨卫星
  • 新经济与法|如何治理网购刷单与控评?数据合规管理是关键
  • 我国核电总体规模首次跃居世界第一,发电量持续增长
  • 起底网红热敷贴“苗古金贴”:“传承人”系AI生成,“千年秘方”实为贴牌货