你是否注意到 B 站等视频平台中有一个画中画功能?点击后视频会展现为一个小窗,即使将主窗口缩小或切换到其他应用,小窗口依然保留在桌面上播放。
随着 Chrome 116+ 支持 Document Picture-in-Picture API,我们不仅能播放视频,还能将整个页面内容移入画中画小窗口,并在其中实现自定义控件、进度条等操作。本文将演示如何实现主页面和小窗的视频同步控制,例如暂停、音量调节、进度跳转保持一致。
为什么要使用 Document PiP API
在多任务处理场景下,用户常需要在观看视频的同时浏览信息或回复消息。传统的小窗模式(PiP)功能有限,无法携带自定义控件与交互逻辑。新的 Document Picture-in-Picture API 允许整个文档出现在独立的小窗口中,支持丰富交互。
与传统 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: ;
: ;
}
{
: ;
: auto;
: (, , , );
: ;
: (, , , );
: 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;
}
}



