前言
随着 Chrome 116+ 对 Document Picture-in-Picture API 的支持,我们不再局限于传统的视频小窗模式。新 API 允许将整个文档移入画中画窗口,并保留完整的交互能力。本文将演示如何实现主页面与画中画窗口之间的视频状态同步(播放、暂停、进度、音量)。

为什么使用 Document PiP API
传统 Picture-in-Picture 仅支持视频元素本身,无法携带自定义控件。Document PiP 则不同,它可以将整个页面上下文带入小窗,支持按钮、进度条等任意 HTML 元素的交互。这对于视频会议、在线课程或需要自定义控制的播放器场景尤为适用。
与传统 PiP 的区别:
- 传统 PiP:功能有限,无法带自定义控件与交互。
- Document PiP:完整 HTML 支持,可包含按钮、进度条等交互元素;与原始页面共享 JavaScript 上下文;尺寸灵活且支持双向通信。
完整代码案例
代码中 1.mp4 为测试视频资源,大家可自行获取相应资源源,修改 video 的 src 即可。
CSS 样式
* {
margin: 0;
padding: 0;
box-sizing: border-box;
}
body {
font-family: 'Segoe UI', Tahoma, Geneva, Verdana, sans-serif;
line-height: 1.6;
color: #333;
background: linear-gradient(135deg, #1a2a6c, #b21f1f, #1a2a6c);
padding: 20px;
min-height: 100vh;
}
.container {
max-width: 1200px;
margin: 0 auto;
background-color: (, , , );
: ;
: (, , , );
: hidden;
}
{
: (to right, , );
: white;
: ;
: center;
}
{
: ;
: ;
: (, , , );
}
{
: ;
: ;
: ;
: auto;
}
{
: flex;
: ;
: ;
}
{
: ;
: ;
: ;
: hidden;
: (, , , );
}
{
: relative;
: ;
: ;
}
{
: absolute;
: ;
: ;
: ;
: ;
: block;
}
{
: flex;
: ;
: ;
: ;
}
{
: ;
: white;
: none;
: ;
: ;
: pointer;
: ;
: all ease;
: flex;
: center;
: ;
}
{
: ;
: (-);
: (, , , );
}
{
: ;
: not-allowed;
: none;
: none;
}
{
: ;
: white;
: ;
: ;
: (, , , );
}
{
: ;
: ;
: ;
: solid ;
}
{
: ;
}
{
: flex;
: flex-start;
: ;
}
{
: ;
: white;
: ;
: ;
: ;
: flex;
: center;
: center;
: ;
: ;
}
{
: fixed;
: ;
: ;
: ;
: ;
: black;
: ;
: hidden;
: (, , , );
: ;
: none;
}
{
: ;
: ;
: cover;
}
{
: absolute;
: ;
: ;
: ;
: flex;
: center;
: ;
: ;
: opacity ;
}
{
: ;
}
{
: ;
: ;
: ;
: ;
: monospace;
}
{
: ;
: ;
: ;
: ;
: solid ;
}
{
: flex;
: ;
: ;
: wrap;
}
{
: flex;
: center;
: ;
}
{
: ;
}
{
: ;
}
(: ) {
{
: column;
}
}




