Javascript 如何将事件处理程序注册到由videojs处理的视频?
我想为videojs处理的视频注册一个事件处理程序,但我无法以可靠的方式选择元素,因为videojs从视频标记中删除属性,并将它们添加到它添加的容器元素中。videojs似乎在每个视频元素ID上附加了相同的后缀:Javascript 如何将事件处理程序注册到由videojs处理的视频?,javascript,video.js,Javascript,Video.js,我想为videojs处理的视频注册一个事件处理程序,但我无法以可靠的方式选择元素,因为videojs从视频标记中删除属性,并将它们添加到它添加的容器元素中。videojs似乎在每个视频元素ID上附加了相同的后缀:\u html5\u api,当包装在容器内时,从以下位置引用: //更新标记id/class以用作HTML5播放技术 //可能认为我们应该在嵌入容器so.vjs技术类后执行此操作 //不闪烁100%宽度/高度,但该类仅适用于.video js父级 tag.id += '_html5_a
\u html5\u api
,当包装在容器内时,从以下位置引用:
//更新标记id/class以用作HTML5播放技术
//可能认为我们应该在嵌入容器so.vjs技术类后执行此操作
//不闪烁100%宽度/高度,但该类仅适用于.video js父级
tag.id += '_html5_api';
因此,有人会争辩说,一个琐碎的修复应该是这样的:
var vid=document.getElementById(“ORIGINALVIDEOID\u html5\u api”)
当然,这种攻击缺乏可靠性,因为这个后缀在将来的版本中可能会改变。但是,将来不太可能更改的一件事是包装器div中存在video
元素(尽管ID不同)
因此,获取视频元素本身的更可靠的方法是(假设视频标签ID为“酷”):
在Firefox中会产生:
我在上面的脚本中包括了两种方法:一种是直接的,另一种是间接的(通过文档并使用获取的ID)。当然,您可以使用您想要的video1
和video2
中的任何一种
这里有几点需要注意:
- 这仅在
函数中起作用;这是一种100%确保玩家已加载的方法videojs().ready()
返回包装器div,然后对其使用contentEl()
访问视频元素querySelector()
var player = videojs("id");
player.on('play', function() {…});
-1:这是如何回答这个问题的?首先,它没有提供对视频元素本身的引用,这正是OP想要的。你怎么知道OP需要处理什么样的事件?或者什么时候?第二,无论它做什么,它都只在播放视频时做。第三,问题中没有具体提到
flash
视频;你是“将军”,结果错过了OP的直接问题。下一次,在没有评论的否决投票之前(在答案被接受之后),花一分钟时间进行自我反思:“我自己的答案是否解决了问题提出的问题?”
var player = videojs("id");
player.on('play', function() {…});