【问题标题】:How to reshow preview frame of video at end of playback with jquery plugin "tubeplayer"如何使用 jquery 插件“tubeplayer”在播放结束时重新显示视频的预览帧
【发布时间】:2011-12-18 10:04:05
【问题描述】:

在我的 youtube 视频结束后,我想让视频恢复到初始状态。我不喜欢最后带有链接的黑屏,我也更喜欢隐藏控制栏,虽然设置为自动隐藏,但在视频停止时无法隐藏。 这可能使用

onPlayerEnded: function(){}, // when the player returns a state of ended

onStop: function(){}, // after the player is stopped

?

请记住,这适用于对象版本,而不是 iframe。 Tumblr(通常)将 youtube 嵌入为 flash,而不是 iframe。

您可以在此处查看示例:http://syndex.me,顺便说一下,它已经通过非常漂亮的 Tubeplayer 插件在 Tumblr 限制视频范围的情况下成功地做了很多事情。现在,如果我也可以美化/最小化视频的结尾! 非常感谢。

【问题讨论】:

    标签: jquery jquery-plugins youtube-api


    【解决方案1】:

    您可以使用 YouTube JSAPI 实现此目的。我没有等待播放器完成,而是有一个计时器来检查播放器的时间头何时达到持续时间,因此视频已完成,但在播放器开始关闭之前。然后您只需返回 0 并暂停,如下所示:

    var i   = setInterval( checkPlayer, 100 );
    
    function checkPlayer()
    {
        if ( player.getCurrentTime() >= player.getDuration() )
        {
            clearInterval( i );
    
            player.seekTo( 0 );
    
            player.pause();
        }
    }
    

    下面是一些工作代码:

    <div id="player"></div>
    <script src="http://www.youtube.com/player_api"></script>
    <script>
    <!--
        var player;
        var int;
    
        function onYouTubePlayerAPIReady() {
            player = new YT.Player('player', {
                height: '390',
                width: '640',
                videoId: 'u1zgFlCw8Aw',
                events: {
                    'onReady': onPlayerReady,
                    'onStateChange': onPlayerStateChange
                }
            });
        }
    
        function onPlayerReady(event) {
            event.target.playVideo();
        }
    
        function onPlayerStateChange(event) {
            if (event.data == YT.PlayerState.PLAYING) {
                int = setInterval(handleInterval, 100);
            }
        }
    
        function handleInterval() {
            if (player.getCurrentTime() >= player.getDuration()) {
                player.pauseVideo();
    
                player.seekTo(0);
            }
        }
    -->
    </script>
    

    【讨论】:

    • 嗨,艾哈迈德,当我回到网站构建的这一部分时,我会检查一下,并告诉你。感谢您的耐心等待。
    【解决方案2】:

    一种快速而肮脏的方法是设置一个比视频长 5 秒的间隔计时器,然后在间隔完成时运行 onPlayerEnded。使用 blur 或 focusOut 启动间隔,基本上是人们可能会做的一些鼠标事件。

    $(".video").blur(function() {
      $("#something").delay(30500).queue(function() {
        // do something..
    

    如果您想要完全控制,那么您可以使用带有回调和事件的 YouTube Javascript API。 http://code.google.com/apis/youtube/js_api_reference.html#SubscribingEvents

    【讨论】:

    • 这种方法的问题是您需要依靠超时而不是查看视频的作用。例如,如果用户暂停视频,这将失败。
    【解决方案3】:

    艾哈迈德的想法是正确的。您可以通过执行以下操作使用 'onPlayerEnded' 方法在 tubeplayer 插件中复制此内容:

    onPlayerEnded: function(){
    jQuery("#your-tubeplayer")
    .tubeplayer("seek", 0)<br> .tubeplayer("pause");
    }

    值得注意的是,onStop 方法是一个“触发”拦截器。 onPlayer[X] 方法实际上是由播放器调用的,而其他 onX 事件用于在调用 tubeplayer 执行所需操作时进行挂钩。

    W.r.t.隐藏控制栏:您是否使用 showControls: false?据我所知,您只能设置是否要在 youtube 播放器本身的实例化期间显示控件(并且之后不能动态更改它)。

    我测试了上面的修复,当使用 showControls:false 时控制栏仍然隐藏。

    【讨论】:

    • 另外,我现在注意到自动隐藏参数还没有完全实现。非常遗憾。我会尽快解决这个问题
    猜你喜欢
    • 1970-01-01
    • 2020-02-20
    • 1970-01-01
    • 1970-01-01
    • 2011-03-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-07-23
    相关资源
    最近更新 更多