结束事件videojs不起作用

Posted

技术标签:

【中文标题】结束事件videojs不起作用【英文标题】:ended event videojs not working 【发布时间】:2013-05-10 13:14:35 【问题描述】:

我想在我的视频播放完毕后触发一个简单的事件。我把它直接放在我的视频标签下面。

     <script type="text/javascript">
        var myPlayer = videojs("session_video");
          videojs("session_video").ready(function()
          this.addEvent("ended", function() 
            alert('Here I am');
          );
        );       
     </script>

但是我得到:TypeError: this.addEvent is not a function,我找不到原因。

您可以在此处看到它:78.47.121.50(*** 不允许创建链接) 输入代码 01-01-01-2012 以调出视频。

任何见解都非常重要!

亲切的问候, 杰森。

【问题讨论】:

这可能是this 问题,因为ready 方法似乎是异步的。你认为this 指的是什么?您希望 addEvent 方法出现在哪个对象上? @Sushil 是一个视频播放器,结合了html、js和flash创建一个通用播放器。 (见:videojs.com) 【参考方案1】:

“addEvent”和“removeEvent”被替换为“on”和“off”

尝试:

this.on("ended", function() 

【讨论】:

嗨,Lyn,这成功了!非常感谢 :) 你能告诉我你在哪里找到这个信息吗?我在文档中找不到它。 我注意到它是项目 github 存储库中最新的提交评论。真的只是随机运气。 嗯,谢谢分享!愚蠢的不要将它包含在文档中...我现在正在尝试包含一个用于 videojs 的插件,但它仍在使用 addEvent 和 V 你知道我是否可以将它替换为 on/关闭和视频?【参考方案2】:

对于在某些浏览器中仍然存在结束事件问题的用户,您可以求助于此修复:

    player.ready(function() 
            var myPlayer = this;

            playerInstance.on("timeupdate", function(event)  //chrome fix
                if (event.currentTarget.currentTime == event.currentTarget.duration) 
                    console.log('video ended');
                
            );
    );

【讨论】:

我的结束事件在使用 Chrome 浏览器时没有触发。我已经尝试过这个修复,但它似乎不起作用。我认为它可能需要包含在以下内容中:videojs("video2").ready(function() 那会更合适吗?不明白为什么它可以在其他浏览器上运行,但不能在 Chrome 上运行... 这帮助我解决了奇怪的 chrome 错误,有时不会触发结束。谢谢! @CalebO'Leary,我收到错误消息:找不到名称“playerInstance”。添加上述代码后。有什么帮助吗?【参考方案3】:

如果最终用户有意寻找视频以结束保持视频暂停,则不会触发 ended 事件。我能够让它工作:

  <script type="text/javascript">
      var player = videojs('my_video', , function() );
      player.ready(function()
        var duration_time =  Math.floor(this.duration());
        this.on('timeupdate', function() 
          var current_time =  Math.floor(this.currentTime());
          if ( current_time > 0 && ( current_time == duration_time ) )
            $('#continue_button').removeAttr("disabled");
          
        );
      );
  </script>

【讨论】:

【参考方案4】:

2020 年更新答案:

let player = videojs('video-player-id');

player.on('ended', function() 
  this.dispose();
);

我认为最好调用 dispose 更多关于为什么超过here

【讨论】:

【参考方案5】:

在 *** 上,我找到了解决方案的一部分,另一部分从 Lyn Headley 最佳答案中找到。

<script type="text/javascript">
    //rename subtitle button
    videojs.addLanguage('de', 
        "captions off": "Untertitel aus",
    );

    videojs(document.querySelector('video') /* or selector string */, 
        techOrder: ['html5', 'flash'],
        controls: true,
        autoplay: false,
        preload: 'false',
        language: 'de',
        flash: 
            swf: 'video-js.swf'
        
    , function()
        // Player (this) is initialized and ready.
        this.on('ended', function()
            alert('ended');
        );
        this.on('firstplay', function()
            alert('firstplay');
        );
    );
</script>

这会在视频结束时提醒您。 将其放在您的视频代码下 它应该可以工作。

【讨论】:

以上是关于结束事件videojs不起作用的主要内容,如果未能解决你的问题,请参考以下文章

videojs ios 点击暂停键不起作用?

会话结束事件不起作用

UISlider 的 editingDidEnd 事件在 iPad 中不起作用

UI 平移手势不起作用

当 Session.Abandon() 不起作用时,如何以编程方式结束 asp.net 中的会话?

OsX WebFrameLoadDelegate 的 Swift 不起作用