Почему .pause () для видео больше не работает в Chrome? - PullRequest
2 голосов
/ 06 апреля 2019

Я использую pause (), чтобы остановить видео. По какой-то причине это больше не работает в Chrome - видео на короткое время останавливается, но затем продолжает проигрываться, и я полностью теряюсь в том, где моя ошибка.

Несколько месяцев назад я разработал скрипт, который использует pause () для управления воспроизведением видео. Все работало нормально (и до сих пор работает с Firefox), но почему-то перестало работать в chrome где-то в последние два месяца. Я полностью сократил его до нескольких строк кода, и все же моя функция pause () больше не работает в Chromium в Ubuntu 18.04 и самой последней версии Chrome в Windows 7.

<html>
<head>

<script src="https://ajax.googleapis.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>

<script language="JavaScript">

   $( document ).ready(function() {
       var vid = document.getElementById("videoplayer");
       $( "#videoplayer" ).click(function(e) {
           vid.pause();
       });
   });

</script>

</head>
<body>

<video width="1280" height="960" controls id="videoplayer">
 <source src="video.mp4" type="video/mp4">
Your browser does not support the video tag.
</video>

</body>

(я знаю, что это несколько уродливая смесь DOM и jquery, потому что я использую jquery для большей части моего скрипта, но это не должно быть проблемой, не так ли?).

1 Ответ

1 голос
/ 06 апреля 2019

Я не могу сказать вам, что изменилось, но добавление e.preventDefault исправляет это:

$( "#videoplayer" ).click(function(e) {
    e.preventDefault(); // <=====================
    vid.pause();
});

В общем, если вы «обработали» что-то, вы хотите предотвратить действие по умолчанию.

Я предполагаю, что в Chrome реализовано действие по умолчанию для переключения паузы / воспроизведения при нажатии на видео. Таким образом, ваш код приостанавливается, затем Chrome переключает его на воспроизведение.

В таком случае, возможно, стоит разрешить дефолт, а не делать явную паузу, возможно, введя тайм-аут:

$( "#videoplayer" ).click(function(e) {
    if (!vid.paused) {               // Check that video is playing when clicked
        setTimeout(() => {           // V. brief timer to allow default action to occur
            if (!vid.paused) {       // Is it still playing?
                vid.pause();         // Pause it
            }
        }, 0);
    }
});
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...