HTML5 Video Element на iPad не запускает события onclick или touchstart?

Я пытаюсь прикрепить некоторые события к элементу видео HTML5 в своем веб-приложении для iPad, но они, похоже, не срабатывают? Я проверил это как на устройстве, так и в симуляторе и получил те же результаты. Однако события (по крайней мере, для onclick) отлично работают в настольном Safari. Я также пробовал заменить элемент видео на div, и события запускаются нормально? Кто-нибудь еще сталкивался с этим и есть идея для обхода?

<html>
        <head>
                <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
                <title>Test video swipe</title>
        </head>
        <body>

                <video src='somevid.mp4' id='currentlyPlaying' width='984' height='628' style='background-color:#000;' controls='controls'></video>

                <script>
                        var theVid = document.getElementById("currentlyPlaying");

                                theVid.addEventListener('touchstart', function(e){
                                        e.preventDefault();
                                        console.log("touchstart");
                                }, false);

                                theVid.addEventListener('click', function(e){
                                        e.preventDefault();
                                        console.log("click");
                                }, false);

                                theVid.addEventListener('touchmove', function(e){
                                        console.log("touchmove");
                                }, false);

                                theVid.addEventListener('touchend', function(e){
                                        console.log("touchend");
                                }, false);

                                theVid.addEventListener('touchcancel', function(e){
                                        console.log("touchcancel");
                                }, false);



                </script>
        </body>
</html>

person ad rees    schedule 27.09.2010    source источник


Ответы (2)


Элемент видео на iPad будет поглощать события, если вы используете атрибут управления. Вы должны предоставить свои собственные элементы управления, если хотите, чтобы элемент реагировал на события касания.

person Quentin    schedule 27.09.2010
comment
Великолепно! это сработало! Я столкнулся с несколькими несоответствиями с мобильным Safari и настольным Safari. Некоторые из них, такие как отключение автовоспроизведения на видео, задокументированы на сайте Apple, но, похоже, есть множество недокументированных причуд или, осмелюсь сказать, ошибок! Знаете ли вы какие-либо ресурсы, в которых перечислены эти различия? - person ad rees; 27.09.2010
comment
Я не мог заставить это работать :(. Как именно вы создаете элемент видео? Мой выглядит так: ‹video style=background:black;display:block id=vid height=240px width=320px src=source›‹/video› а в JS я делаю document.getElementById(vid).addEventListener('click', function(e){ e.preventDefault();alert(clicked);}); Он отлично работает на настольном сафари, но не на ipad/ iphone Пожалуйста, предложите обходной путь. - person bhups; 10.01.2011
comment
@bhups — если у вас есть вопрос, задайте вопрос, а не просто комментируйте чужой ответ на другую проблему. - person Quentin; 10.01.2011
comment
привет, Дэвид, у меня такая же проблема, но я не понимаю, как удаление атрибута управления решает эту проблему. Я пытался сделать то же самое без каких-либо успехов. Я не спрашивал, так как это может звучать как дублирование этого вопроса. - person bhups; 10.01.2011
comment
Поскольку вы удалили атрибут управления, это явно не тот же вопрос. Даже если бы это было так, вы могли бы сослаться на этот вопрос и объяснить, чем отличается ваша проблема. - person Quentin; 10.01.2011
comment
Привет, Дэвид, вот мой вопрос с небольшими вариациями. stackoverflow.com/ вопросы/4654443/ - person bhups; 11.01.2011

Из собственного довольно болезненного опыта за последние пару недель могу начать такой список (по крайней мере, для iPad 3.2). Некоторые из этих «функций» могут быть задокументированы, но часто трудно найти соответствующее предложение.

  • Свойство volume игнорируется (его можно установить, и оно изменится, но фактическая громкость на устройстве не изменится).
  • Свойство currentTime доступно только для чтения. Мой обходной путь для этого — вызвать load(), что, по крайней мере, позволяет мне вернуться к началу клипа.
  • событие onended не будет надежно опубликовано, если элементы управления не будут видны. Мой обходной путь для этого - отслеживать событие timeupdate и сравнивать currentTime с duration
  • как вы говорите, autobuffer и autoplay отключены.
  • видео не будет кэшироваться локально независимо от настроек кэша приложения.
  • многие правила CSS не работают должным образом при применении к тегу <video> - например. opacity и z-index кажутся неэффективными, что означает, что вы не можете затемнить или скрыть видео. Вы можете установить display:none, но это очень круто.

Как я уже сказал, это, вероятно, не исчерпывающий список, и я буду рад дополнениям или исправлениям.

(Кроме того, после много поиска в Google я нашел здесь список скудное подмножество методов и свойств плагина QT, которые поддерживаются в Mobile Safari).

person wodenx    schedule 16.10.2010
comment
Отличный ответ. Я также испытал все вышеперечисленное, и мне нужно было усвоить это на собственном горьком опыте. Надеюсь, что кто-то прочитает это до начала разработки! - person Develoger; 29.08.2013
comment
То же самое и здесь, видео на таких устройствах может быть большой болью. Мои последние 2 недели были довольно ужасными, и я пришел к тем же выводам, что и к этому превосходному ответу. - person Aurelio; 25.10.2013