gpt4 book ai didi

javascript - 为什么 video.requestPictureInPicture() 只能工作一次?

转载 作者:行者123 更新时间:2023-12-04 13:01:24 32 4
gpt4 key购买 nike

我正在尝试通过 Javascript onscroll 功能进入和退出视频的 PIP 模式,我只能进入和退出此模式一次。
这是我的代码笔:

    if (!myVideo.paused && myVideo.currentTime > 0 
&& !myVideo.ended && !isVideoPIP) {
console.log('runPip')
myVideo.requestPictureInPicture()
.then(()=>{isVideoPIP = true;})
.catch(e=>console.log(e.message))
}
https://codepen.io/Greggg/pen/WBdeJG
我第二次收到此错误消息“如果画中画中还没有元素,则必须处理用户手势。”

最佳答案

如果它不起作用,那是因为 scroll不属于 user-trusted events .

现在,有时它的工作原理实际上很奇怪......但有一个合理的解释。

用户信任的事件通常被认为存在相当长的一段时间,但它们最终应该会消失:

btn_500ms.onclick = e => trigger_in(500); // works
btn_6s.onclick = e => trigger_in(6000); // fails

function trigger_in(ms) {
setTimeout(() => {
video.requestPictureInPicture()
.then(() => {
// auto-exit in 1s
setTimeout(() => {
document.exitPictureInPicture();
}, 1000);
})
.catch(console.error);
}, ms);
};
<video id="video" controls="" muted loop autoplay src="https://media.w3.org/2010/05/sintel/trailer.webm"></video>
<button id="btn_500ms">trigger PiP in 500ms</button>
<button id="btn_6s">trigger PiP in 6s</button>


所以我猜你解释为只在第一次滚动时工作实际上是由某些情况引起的,即你在小于用户信任事件的最大生命周期后滚动(在当前的 Chrome74 中似乎是 5 秒)。您可以尝试在再次滚动之前单击 codepen 页面中的任意位置。

关于javascript - 为什么 video.requestPictureInPicture() 只能工作一次?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56252108/

32 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com