iPad 上的 HTML5 视频元素不会触发 onclick 或 touchstart 事件?

Posted

技术标签:

【中文标题】iPad 上的 HTML5 视频元素不会触发 onclick 或 touchstart 事件?【英文标题】:HTML5 Video Element on iPad doesn't fire onclick or touchstart events? 【发布时间】:2011-04-17 18:01:28 【问题描述】:

我正在尝试将一些事件附加到我的 iPad 网络应用程序中的 html5 视频元素,但它们似乎没有触发?我已经在设备和模拟器上对此进行了测试,并得到了相同的结果。然而,这些事件(至少对于 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>

【问题讨论】:

【参考方案1】:

如果您使用 controls 属性,iPad 上的 video 元素将吞噬事件。如果您希望元素响应触摸事件,则必须提供自己的控件。

【讨论】:

太棒了!那行得通!我在移动版 Safari 和桌面版 Safari 上遇到了很多不连贯的情况。其中一些喜欢禁用视频自动播放记录在苹果网站上,但似乎有大量未记录的怪癖或者我敢说错误!您知道列出这些差异的任何资源吗? 我无法让它工作 :(。你究竟是如何创建视频元素的?我的看起来像 并且在 JS 中我正在做 document.getElementById("vid").addEventListener('click', function(e) e.preventDefault() ;alert("clicked");); 它在桌面 safari 上运行良好,但在 ipad/iphone 上运行良好。请提出一些解决方法。 @bhups — 如果您有问题,请提出 question,不要只评论别人对不同问题的回答。 嗨大卫,我的问题是一样的,但我不清楚删除控件属性是如何解决这个问题的。我尝试做同样的事情但没有成功。我没有问,因为这听起来像是这个问题的重复。 既然去掉了controls属性,显然不是同一个问题。即使是这样,您也可以参考这个问题并解释您的问题有何不同。【参考方案2】:

根据我过去几周相当痛苦的经历,我可以开始这样的列表(至少对于 iPad 3.2)。其中一些“特征”可能会记录在案,但相关句子通常很难找到。

volume 属性被忽略(您可以设置它,它看起来会发生变化,但不会影响设备上的实际音量)。 currentTime 属性是只读的。我的解决方法是调用load(),这至少可以让我重置到剪辑的开头。 除非控件可见,否则onended 事件将无法可靠发布。我的解决方法是监视timeupdate 事件并将currentTimeduration 进行比较 如您所说,autobufferautoplay 已禁用。 无论应用程序缓存设置如何,视频都不会在本地缓存。 当应用于&lt;video&gt; 标记时,许多css 规则似乎没有按预期运行——例如。 opacityz-index 似乎都无效,这意味着您无法调暗或隐藏视频。可以设置display:none,但是很唐突。

正如我所说,这可能不是一个详尽的列表,我欢迎补充或更正。

(另外,在 大量 谷歌搜索之后,我发现了一个列表 here,其中包含 Mobile Safari 支持的少量 QT 插件方法和属性。

【讨论】:

很好的答案 我也经历了以上所有的事情,需要通过艰苦的方式学习。希望有人会在开始开发之前阅读此内容! 同样如此,此类设备上的视频可能会非常痛苦。我过去的两周非常糟糕,得出的结论与这个出色的答案几乎相同。

以上是关于iPad 上的 HTML5 视频元素不会触发 onclick 或 touchstart 事件?的主要内容,如果未能解决你的问题,请参考以下文章

视频 html5 元素上的播放事件是啥?

Javascript onloadedmetadata 事件未在 iOS 设备上触发

iPad/iphone 上的 HTML5 视频背景

HTML5 视频不适用于 iPad 上的 jquery bxSlider 插件

iPad HTML5 视频元素不显示海报

html5 视频不会在 ipad 上播放任何 mp4 编码