【问题标题】:Bind Play/Pause/Ended functions to HTML5 video using jQuery使用 jQuery 将播放/暂停/结束功能绑定到 HTML5 视频
【发布时间】:2012-03-26 14:32:29
【问题描述】:

我正在尝试使用 jQuery 绑定 play/pauseended 事件,但是有一个问题:

当我右键单击视频并选择播放或暂停时,图标会正确更改。当我点击播放按钮时,它会变为暂停,但如果我点击暂停按钮继续播放视频,它不会再次变为播放。

谁能告诉我哪里出错了?

这是我的代码:

    var PlayVideo = function () {
            if ($('#video').attr('paused') == false) {
                $('#video').get(0).pause();

            } else {
                $('#video').get(0).play();

            }
        };

        $('#playbtn').click(PlayVideo);
        $('#video').click(PlayVideo);

        $('#video').bind('play', function () {
            $('.playbtn').addClass('pausebtn');
        });

        $('#video').bind('pause', function () {
            $('.playbtn').removeClass('pausebtn');

        });

        $('#video').bind('ended', function () {
            $('.playbtn').removeClass('pausebtn');

        });

CSS:

    .playbtn {
    display: block;
    width: 32px;
    height: 32px;
    margin-left: 10px;
    background: url('../images/play.png') no-repeat;
    opacity: 0.7;
    -moz-transition: all 0.2s ease-in-out; /* Firefox */
    -webkit-transition: all 0.2s ease-in-out; /* Safari and Chrome */
    -o-transition: all 0.2s ease-in-out; /* Opera */
    transition: all 0.2s ease-in-out;
}

.pausebtn {
    display: block;
    width: 32px;
    height: 32px;
    margin-left: 10px;
    background: url('../images/pause.png') no-repeat;
    opacity: 0.7;
    -moz-transition: all 0.2s ease-in-out; /* Firefox */
    -webkit-transition: all 0.2s ease-in-out; /* Safari and Chrome */
    -o-transition: all 0.2s ease-in-out; /* Opera */
    transition: all 0.2s ease-in-out;
}

【问题讨论】:

    标签: jquery html events video bind


    【解决方案1】:

    HTML5 视频没有pause-属性。相反,您应该看看 media events and properties

    在你的情况下,这意味着:

    if (!$('#video')[0].paused) {
       $('#video')[0].pause();
    } else {
       $('#video')[0].play();
    }
    

    顺便说一句:由于您经常调用$('#video'),因此将其存储在一个变量中可能是个好主意——这样您就不必多次调用 jQuery 选择器。喜欢:

    $video = $('#video'); //from now on just use $video instead of $('#video')
    

    编辑:关于您的评论,如果没有看到您正在使用的控件(HTML 和 CSS),很难判断,但无论如何您可以对所有事件使用相同的处理程序触发相同的行为(并且由于该行为在pause 上是正确的,因此在绑定到同一个处理程序时也应该在ended 上)。此外,在您发布的代码中,您在结束时使用removeClass(它可能应该是addClass)。所以这应该有效:

    $('#video').bind('play ended', function () { //should trigger once on any play and ended event
        $('.playbtn').addClass('pausebtn'); //might also be $('#playbtn') ???
    });
    
    $('#video').bind('pause', function () { //should trigger once on every pause event
         $('.playbtn').removeClass('pausebtn'); //might also be $('#playbtn') ???
    });
    

    我注意到的另一个小故障是您使用了一次#playbtn,而另一次使用了.playbtn。当您尝试使用播放按钮执行某项操作时,请确保您在此处指的是相同的项目。

    【讨论】:

    • @m90-谢谢提及。对不起,这是一个拼写错误。那么我如何在视频结束后更改图标。点击播放 btn 后它会改变,但它又没有切换。
    • @DotNetter 除了您可以将第二类减少到background: 行(其余部分相同)之外,CSS 似乎还可以。你有没有检查过。 ended 事件真的会触发并且 b。如果新的background 规则没有被其他样式覆盖?
    • 一切正常如果我右键单击视频但问题出在按钮上。暂停视频后它没有切换。
    • @DotNetter 事件会触发吗?额外的课程会被申请吗?请检查一下。
    • 是的。它被解雇了,因为我没有显示任何关于 firebug 的错误。
    猜你喜欢
    • 1970-01-01
    • 2012-05-06
    • 2012-08-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多