Почему video.requestPictureInPicture () работает только один раз? - PullRequest
0 голосов
/ 22 мая 2019

Я пытаюсь войти и выйти из режима PIP видео через функцию прокрутки Javascript, и я могу только один раз войти и выйти из этого режима.Вот мой кодовый блок:

`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

Второй раз, когда у меня появляется это сообщение об ошибке "Должен обрабатывать жест пользователя, если в Picture-in-Picture еще нет элемента. "

1 Ответ

0 голосов
/ 22 мая 2019

Если это не работает, это потому, что scroll не является частью пользовательских событий .

Теперь, иногда это работает на самом деле странно ... ноимеет рациональное объяснение.

Доверенные события пользователя обычно считаются живыми довольно долгое время, но в конечном итоге они должны умереть:

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>

Итак, я предполагаю, что то, что вы интерпретировали как работу только с первой прокруткой, на самом деле было вызвано некоторыми обстоятельствами, когда вы прокручивали после того, как макс.время события, которому доверяют пользователи (кажется, 5 с в текущем Chrome74, кстати).Вы можете попробовать просто щелкнуть в любом месте на странице вашего кодового заглушки, прежде чем снова прокрутить.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...