javascript - 使用popcornjs,如何一键播放视频并显示脚注?

标签 javascript html html5-video popcornjs

我有一个包含 10 个视频的导航(菜单)栏,我希望单击一下即可显示每个视频及其脚注。现在,只需单击一下,每个视频都会出现,但我不知道如何处理不同的脚注?

这是我的 html:

    <div id="menu">
    <uL>
    <li>Choose a Country:</li>
    <li><a href="javascript:changeSource1();">US</a></li> 
    <li><a href="javascript:changeSource2();">Canada</a></li> 
    </ul>
    </div>

    <div id="content">
    <div class="video-player">
    <video id="videos" controls>
    <source id="mp4" src="Video/(name of the video).mp4" type="video/mp4" />
    <source id="ogv" src="Video/(name of the video).ogv" type="video/ogg" />
    </video>

     </div> 

    <div id="video-text">
    <p id="popcorn-text">Ipsum Lorem...Aenean consectetur ornare pharetra. Praesent et urna eu justo convallis sollicitudin. Nulla porttitor mi euismod neque vulputate sodales. </p>
     </div>

     </div>  

这是我的 POCORNJS 代码,仅适用于视频:

    <script>
    function changeSource1()
    { 
    document.getElementById("mp4").src=  "Video/(name of the video).mp4";
    document.getElementById("ogv").src=  "Video/(name of the video).ogv";
    document.getElementById("videos").load();
    } 
    </script>

如何使用 popcornjs 代码实现多功能(例如为每个视频显示不同的脚注)? 谢谢, N

最佳答案

您可以拥有任意数量的爆米花实例,因此每个视频都有一个是有意义的。每个 Popcorn 实例都有自己的一组脚注。我们将从一个数组开始,动态设置每个视频。

var data = [
    {
        src: {
            mp4: 'video1.mp4', webm: 'video1.webm', ogg: 'video1.ogv'
        },
        footnotes: [
            {
                start: 2,
                end: 4,
                text: 'Ipsum Lorem...'
            }
            // etc.
        ]
    }
    // etc.
];

现在,设置爆米花实例,加载数据,并添加用于切换的点击事件处理程序。

var activeVideo = data[0];

//Popcorn provides this handy 'forEach' helper
Popcorn.forEach(data, function(vid, i) {
    var button;
    vid.video = document.createElement('video');
    Popcorn.forEach(vid.src, function(src, type) {
        var source = document.createElement('source');
        source.setAttribute('src', src);
        source.setAttribute('type', 'video/' + type);
        vid.video.appendChild(source);
    });
    vid.video.preload = true; //optional
    document.getElementById('').appendChild(vid.video);
    if (i) {
        vid.video.style.display = 'none';
    }

    vid.popcorn = Popcorn(vid.video);

    //every footnote needs a target
    vid.popcorn.defaults('inception', {
        target: 'video-text'
    });

    Popcorn.forEach(vid.footnotes, function(footnote) {
        vid.popcorn.footnote(footnote);
    });

    button = document.getElementById('button' + i); // or create one here
    button.addEventListener('click', function() {
        //pause and hide the old one
        activeVideo.popcorn.pause();
        activeVideo.style.display = 'none';

        activeVideo = data[i];
        activeVideo.style.display = '';
        activeVideo.popcorn.play();
    });
});

差不多就可以了。

一个问题是,这在 iPad 上不起作用,因为如果您在一页上提供多个视频,Mobile Safari 就会崩溃。在这种情况下,只需创建一个视频元素,然后在点击处理程序中设置 src 属性(仅限 mp4)并调用 .load()。您仍然可以在同一个视频标签上拥有多个 Popcorn 实例,但是当您“停用”实例时,只需调用 .disable('footnote') 即可防止它在错误的视频上显示脚注,并且在事件的那个上运行enable

关于javascript - 使用popcornjs,如何一键播放视频并显示脚注?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12941303/

相关文章:

javascript - JQuery - 在事件类时获取值数据属性

javascript - 每当用户更改(即编辑)html 表中列中的值时,总计将自动重新计算?我怎样才能实现它?

javascript - jquery+简单切换脚本+在一个站点上多次使用

php - 如何在 php html 的 IE 中启用多个图像文件选择?

azure - 在 WAMS 媒体文件上启用 CORS,以便在 MPEG-DASH 引用播放器中播放

javascript - Youtube API 如何在视频结束时从 0 秒开始播放视频?内嵌框架,Javascript

android - html5 mediaplayer 播放 youtube 视频

javascript - Grails-如何验证 gsp 中参数的值?

javascript - 从另一个站点读取值

javascript - 将变量分配给表单输入值并使用 jquery 打印