使用addevent时,VideoJs自动播放不会被触发

时间:2012-08-26 18:40:30

标签: javascript jquery javascript-events html5-video

我按照videojs的快速入门指南,将以下代码放在我的html文档正文中:

<video id="video" class="video-js vjs-default-skin" controls width="941" 
      height="531" autoplay preload="auto" data-setup="{}">
  <source type="video/mp4" src="dummy_url">
</video>

一切正常。自动播放和控制到位。

由于我需要在视频结束时删除视频,因此我将以下代码放在视频标记之后:

<script type="text/javascript">
    _V_("video").addEvent("ended", videoEnd);

    function videoEnd(){
        $('#divId').slideToggle("slow");
        setTimeout("$('#divId').remove()", 700);
    }
</script>

问题在于,每次我尝试检测某些视频时,自动播放都不再起作用。即使以下情况也不会触发自动播放:

<script type="text/javascript">
    _V_("video").ready(function(){

        var myPlayer = this;

        // EXAMPLE: Start playing the video.
        myPlayer.play();

    });

    _V_("video").addEvent("ended", videoEnd);

    function videoEnd(){
        $('#divId').slideToggle("slow");
        setTimeout("$('#divId').remove()", 700);
    }
</script>

关于如何保持自动播放并听取已结束事件的任何想法?

2 个答案:

答案 0 :(得分:1)

好吧,我不确定这是否是最正确的实现,但是:

<video id="video" class="video-js vjs-default-skin" controls 
     width="941" height="531" autoplay preload="auto" data-setup="{}">
     <source type="video/mp4" src="dummy_url">
</video>

<script type="text/javascript">
    interval = setInterval(videoLoaded, 100);

    function videoEnd(){
            $('#someid').slideToggle("slow");
            setTimeout("$('#someid').remove()", 700);
        }

    function videoLoaded(){
        if(!_V_.players.video){
            return false;
        }

        _V_.players.video.play();
        _V_.players.video.addEvent("ended", videoEnd);
        clearInterval(interval);
    }

</script>

根据我的阅读,另一种方法是仅通过js加载视频。

这是一个问题(从我读到的)和videojs初始化视频对象的方式。可以找到更多详细信息here

希望它可以帮助一些碰碰:)

答案 1 :(得分:0)

实际上更好的方法是使用setTimeout函数启动videoLoaded函数,因为你无法控制你的播放器(如果你需要它)。