> For AI agents: the complete documentation index is available at /llms.txt, the full documentation bundle is available at /llms-full.txt.

# 页面可见性监听

## 1、业务需求：

PC 端直播，为了统计用户观看的有效时长，对观看直播的规则做了一些要求，目的是为了提高用户的有效观看时长。

**具体要求如下**：

> 1. 浏览器页面最小化时，暂停播放，停止计时；
> 2. 浏览器页面恢复时，视频继续播放，计时从零开始；
> 3. 刷新浏览器页面时，重新计时；

## 2、页面显示与隐藏

使用的是浏览器的 **visibilityState** 属性：

```javascript title="页面显示与隐藏"
// 页面的显示与隐藏
const pageShowOrHide = function (e) {
    let stv = e.target.visibilityState || document.visibilityState;
    if (stv === "hidden") {
        // 用户最小化了页面 or 切到了别的页面
        /* 处理页面隐藏事件代码 */
    } else if (stv === "visible") {
        // 用户回到了页面
        /* 处理页面恢复事件代码 */
    }
};
```

绑定&解除事件函数

```javascript title="事件监听"
// 绑定事件函数
window.addEventListener(
    "visibilitychange",
    function () {
        pageShowOrHide();
    },
    false
);

window.addEventListener("visibilitychange", pageShowOrHide());

// 解除事件函数
window.removeEventListener(
    "visibilitychange",
    function () {
        pageShowOrHide();
    },
    false
);

window.removeEventListener("visibilitychange", pageShowOrHide());
```

> **false**：是否冒泡

## 3、刷新页面（页面卸载）

```javascript title="刷新页面"
window.addEventListener(
    "beforeunload",
    function () {
        /* 执行页面卸载前的事件代码 */
    },
    false
);

window.removeEventListener("beforeunload", function () {}, false);

// or
window.addEventListener("beforeunload", function () {
    /* 执行页面卸载前的事件代码 */
});

window.removeEventListener("beforeunload", function () {});
```
