HTML5 页面上任意数量视频的视频自定义控件

HTML5 video custom controls for any number of videos on the page

朋友们!

我需要一个简单的文本按钮 – "Play"。如果正在播放视频,它应该是隐藏的,当视频结束时应该是可见的。一切正常,但只有当我在页面上有一个具有唯一 ID 的视频时它才有效。

HTML:

<video id="main-video" width="640" height="480">
    <source src="media//mp4/video.mp4" type="video/mp4">
</video>
<span id="custom-play-button">Play</span>

这是 JS:

window.onload = function() {
    var video = document.getElementById("main-video");
    var playButton = document.getElementById("custom-play-button");
    playButton.addEventListener("click", function() {
        document.getElementById('main-video').addEventListener('ended',myHandler,false);
            video.play();
            playButton.style.visibility = "hidden";
            function myHandler(e) {
                playButton.style.visibility = "visible";
            }
        });
    }

但是页面上会有4,5,6...100个视频(而且会有)怎么办?我无法处理 100 个唯一 ID...

您可以将每个视频和按钮放在父 div 标签中,如下所示。

<div class="video-container">
    <video id="main-video" width="640" height="480">
        <source src="media//mp4/video.mp4" type="video/mp4">
    </video>
    <span id="custom-play-button">Play</span>
</div>

我正在使用 jQuery 代码,您可以轻松地将其转换为纯 JS。 这应该有效。

$(".video-container").each(function () {
    var video = $(this).find("video");
    var plainVideo = video.get(0);/*DOM video object, unwrapped from jQuery*/
    var playBtn = $(this).find("span");

    playBtn.click(function () {
        video.get(0).addEventListener('ended',myHandler,false);
        plainVideo.play();
        playBtn.css("visibility", "hidden");

        function myHandler(e) {
            playBtn.css("visibility", "visible");
        }
    });
});

至少这会让您对解决此问题的方法有所了解。

有纯Javascript(无jQuery)

你应该依赖 id,使用标签作为参考,并获得最近的 span。请参阅下面的代码。

function closest(el, sel) {
    if (el != null) return el.matches(sel) ? el : (el.querySelector(sel) || closest(el.parentNode, sel));
}

var videos = document.getElementsByTagName("video");
for (i = 0; i < videos.length; i++) {
    var video = videos[i];
    var playButton = closest(video, "span");
    playButton.addEventListener("click", function () {
        document.getElementById('main-video').addEventListener('ended', myHandler, false);
        video.play();
        playButton.style.visibility = "hidden";
        function myHandler(e) {
            playButton.style.visibility = "visible";
        }
    });
}
<video width="640" height="480">
    <source src="media//mp4/video1.mp4" type="video/mp4">
</video>
<span class="custom-play-button">Play</span>

<video width="640" height="480">
    <source src="media//mp4/video2.mp4" type="video/mp4">
</video>
<span class="custom-play-button">Play</span>

您必须使用 CSS class 而不是 id,并且您必须使用 JavaScript 来监听视频事件并进行自定义播放暂停按钮切换等控件。 JavaScript 的 event.target 告诉您哪个视频在做什么。 MDN 有一篇很棒的文章 Creating a cross-browser video player,其中包含有关单个视频的自定义控件的详细说明。

自动化

我花了几天时间创建了一个 JavaScript 可以为您 HTML页。

可读的源代码在 github at rhroyston/material-controls-for-html-video

做起来相当复杂,但如您所见,这是可以做到的。实时工作演示在 https://hightechtele.com/articles/material-controls-for-html-video

最后,就像我说的,这花了我几天时间。手工制作单个视频很容易,但我想 automate/script 它。 ...因此请查看脚本(以及附带的小 CSS)以了解它是如何完成的。