js如何监听页面的展示与隐藏(visibilitychange) 以及苹果部分机型 safari浏览器无法监听到(visibilitychange)的处理办(pageshow)。

一、场景:当标签页面隐藏、然后展示的时候触发事件

涉及到两个网页的跳转 而产生的问题

二、安卓和ios需要分别来处理兼容问题

安卓 中可以直接使用 visibilitychange 来判断标签页展示、还是隐藏

document.addEventListener("visibilitychange", () => { 
  if(document.hidden) {} // 页面被挂起
  else {  // 页面呼出
  	// 增加路由判断 仅当前页面生效
    // if(window.location.pathname === "/activityMidPage"){
    //  // ...
    // }
  }
});

visibilitychange MDN官方文档

ios 中无法触发 visibilitychange 事件,所以需要 pageshow 来做一个兼容

const isIos = /ipad|iPhone|Mac/i.test(window.navigator.userAgent) 
if(isIos) {
  window.addEventListener('pageshow', function(event) {
    // // 增加路由判断 仅当前页面生效
    // if(window.location.pathname === "/activityMidPage"){
    //  // ...
    // }
  }) 
}

pageshow MDN官方文档 https://developer.mozilla.org/zh-CN/docs/Web/API/Window/pageshow_event

  • 0
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
在Vue中,没有与小程序中的onShow()生命周期钩子方法完全等效的方法,因为Vue不是页面级别的框架,而是组件级别的框架。但是,我们可以通过使用Vue的其他生命周期钩子方法和自定义事件来模拟实现类似的功能。 一种方法是使用Vue的created()生命周期钩子方法来在组件被创建时执行特定的代码。可以在created()方法中注册一个事件监听器,在页面显示时触发事件并执行相关操作。 例如: ``` <template> <div> <!-- Component Content --> </div> </template> <script> export default { created() { // 注册一个事件监听器,在页面显示时触发事件并执行相关操作 this.$eventBus.$on('pageShow', () => { // 在这里执行相关操作 console.log('页面显示了'); }); }, destroyed() { // 组件销毁时,记得取消事件监听 this.$eventBus.$off('pageShow'); } } </script> ``` 在上面的示例中,我们首先在Vue组件的created()生命周期钩子方法中注册了一个名为'pageShow'的事件监听器。然后,在每个页面需要显示时,我们可以在父组件中使用自定义的事件总线(eventBus)来触发'pageShow'事件。 例如: ``` <template> <div> <button @click="showPage">显示页面</button> </div> </template> <script> export default { methods: { showPage() { // 触发'pageShow'事件,通知组件页面将要显示 this.$eventBus.$emit('pageShow'); } } } </script> ``` 这样,当点击"显示页面"按钮时,'pageShow'事件将被触发,从而执行相关操作,并在控制台中打印出"页面显示了"。 需要注意的是,为了实现这样的功能,我们需要在Vue中使用自定义的事件总线(eventBus)来进行事件的触发和监听。简单实现的方式可以是创建一个新的Vue实例作为事件总线,然后将其挂载到Vue原型链上,使得所有的组件都可以访问该事件总线。 例如,在main.js中: ``` import Vue from 'vue' Vue.prototype.$eventBus = new Vue(); ``` 这样,我们就可以在任意组件中使用this.$eventBus来进行事件的触发和监听。 需要注意的是,由于Vue是一个响应式框架,它更关注组件的状态变化。因此,如果需要通过监听页面显示来更新组件状态或数据,更好的方式是使用Vue的其他生命周期钩子方法(如mounted())来实现。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值