覆盖在 ipad 中动态插入的视频标签上

发布于 2024-11-27 02:44:34 字数 779 浏览 0 评论 0原文

我目前正在开发一个支持 ipad 的视频播放器。
它更像是一个 jquery 插件。它在桌面上运行得很好,我什至设法在 ipad 上添加我的自定义控件。
到目前为止一切顺利。
问题是我正在动态创建和插入视频元素,这实际上使 ipad 有点混乱。我之所以采用这种方法,是因为我发现(几个小时后)如果您尝试将视频包装 ($.wrap) 到容器中,视频将会崩溃。
插入视频后,它的行为几乎和正常一样(它可以播放并响应事件),但它的位置/显示属性很混乱:我无法在其上添加任何叠加层。是一个问题,因为我希望我的控件能够显示在视频顶部。

而且,视频本身并不响应正常的touchmove touchstart touchend事件。经过一些研究,事实证明,如果您没有打开默认控件,视频会捕获所有事件()。
我的第二个问题是,在包含默认控件后,视频元素似乎仍然忽略我的事件处理程序。

所以,我的问题是(仅在 iPad 情况下):

  • 您是否遇到过这个问题,当然如果您遇到过,您是如何解决的?
  • 只有硬编码的视频元素才会触发事件吗?

I'm currently developing a video player with support for ipad.
It's more of a jquery plugin. It works great on desktop and I even managed to add my custom controls on the ipad.
So far so good.
The problem is that I am creating and inserting dynamically the video element, fact that messes up the ipad a bit. I followed this approach because I found out (after a few long hours) that if you try to wrap ($.wrap) the video into a container, the video will crash.
After inserting the video, it acts almost as normal (it is playable and responds to events), but it's position/display properties are messed up: I can't add any overlay on top of it. This is an issue, because I want my controls to be able to be displayed on top of the video.

Moreover, the video itself does not respond to the normal touchmove touchstart touchend events. After some research, it turns out that if you do not have the default controls turned on, the video captures all the events (iPad touch events on <video> tag).
My second problem is that after including the default controls, the video element still seems to ignore my event-handlers.

So, my questions are (both only in Ipad cases):

  • have you ever faced this problem, and of course if you did, how did you fix it?
  • do only hard-coded video elements trigger events?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(3

花桑 2024-12-04 02:44:34

经过更多挖掘后,我找到了答案。
看起来像 中未标记的答案这个 stackoverflow 问题 是关键。
因此,正如 Jaffa The Cake(我非常感谢他)所说:“你可以修复 z -index 通过给视频元素 -webkit-transform-style:preserve-3d" 动态创建的视频,唯一的解决方法是使用 css3 属性 -webkit-transform-style:保留-3d
这样,人们可以在视频顶部放置一个覆盖层,它可以处理所有事件(例如播放/暂停)。

After some more digging I've found the answer.
Looks like the unmarked answer in this stackoverflow question holds the key.
So, as Jaffa The Cake (who I ow a bucket of thanks) sais : "You can fix z-index on dynamically created videos by giving the video element -webkit-transform-style: preserve-3d", the only workaround is to use the css3 property -webkit-transform-style: preserve-3d.
This way, one can put an overlay on top of the video which can handle all the events (such as play/pause).

白首有我共你 2024-12-04 02:44:34

没有 Ipad 可以处理 Jquery 动态插入的视频,在 Ipad 上视频不会响应触摸或移动,因为默认情况下您必须单击播放按钮之类的链接来触发视频音频,因此您可以使用 Jquery 执行此操作,如下所示

视频

var vid = $('video').get(0);

$('#someselector').click(function() {
 vid.play();

 });
$('#someselector').click(function() {
 vid.stop();

 });

音频

var aud = $('audio').get(0);

$('#someselector').click(function() {
 aud.play();

 });
$('#someselector').click(function() {
 aud.stop();

 });

希望这有帮助。

No Ipad can handle dynamic inserted video by Jquery, on the Ipad videos do not respond to touch or move as by default you have to click on a link like play button to trigger the video audio so you can just use Jquery to do this like below

video

var vid = $('video').get(0);

$('#someselector').click(function() {
 vid.play();

 });
$('#someselector').click(function() {
 vid.stop();

 });

audio

var aud = $('audio').get(0);

$('#someselector').click(function() {
 aud.play();

 });
$('#someselector').click(function() {
 aud.stop();

 });

Hope this helped.

会傲 2024-12-04 02:44:34

我的解决方案是使用 jQuery 删除所有像这样的视频的控件

$('video').each(function() {
    $(this).removeAttr("controls");
});

然后,覆盖元素也会响应相应的事件。
为了使视频再次工作,我添加了播放/暂停视频的 jquery click 事件:

$('video').click(function() {
    $(this).trigger('play');
});

希望有帮助。

The solution for me was to remove the controls using jQuery for all videos like this

$('video').each(function() {
    $(this).removeAttr("controls");
});

Then, the overlay elements also respond to the corresponding events.
To make the video working again, I've added jquery click event that plays/pause the video:

$('video').click(function() {
    $(this).trigger('play');
});

Hope that helps.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文