【问题标题】:JQuery listen on video eventsjQuery 监听视频事件
【发布时间】:2013-11-18 13:51:02
【问题描述】:

在 SO 和 google 上进行了很多搜索,但到目前为止我没有尝试过按预期工作。我正在尝试使用 JQuery 捕捉视频事件。

这是一个稍微不同的情况,因为我正在将已经存在的 divs html 内容从常规图像调整为视频。

我在 html 中有以下 div:

<div id="video" class="grid_cell"><img src="../assets/test.jpg" /></div>

使用 JavaScript 和 JQuery,我对 div 执行以下操作:

vidDiv.html('<video width="' + w + '" height="' + h + '" autoplay="autoplay">' +
                        '<source src="' + src + '" type="video/mp4"></source>' +
                        '</video>');

这可以用视频内容代替图像内容。但是,当我尝试收听视频的事件时,我什么也得不到。请参阅我为此使用的以下代码:

vidDiv.bind('mouseleave ended', function(){
                    console.log("Event triggered!");
            });

请注意,我尝试过 on 而不是 bind 没有成功。元素 vidDiv 是我之前获取的一个 JQuery 对象。随着vidDiv.html(...) 部分的工作并将内容更改为视频,我知道连接是正确的。

我还特意加入了mouseleave 事件,以查看是否有任何事件会触发,并且当用鼠标离开 div 时,它确实有效。但是当视频播放完毕时,我没有收到这样的事件。

有什么想法吗?

编辑:

我接受了以下有效的答案,但我也想在这里提出一种使用纯 JS 和一些 JQuery 的替代方法:

vidDiv.html('<video width="' + w + '" height="' + h + '" autoplay="autoplay">' +
                        '<source src="' + src + '" type="' + type + '"></source>' +
                        '</video>');

            var elementId = vidDiv.attr("id");
            var elem = document.getElementById(elementId);
            elem.addEventListener('ended', function(e) { console.log("Video ended"); }, true);

【问题讨论】:

标签: javascript jquery html video


【解决方案1】:

使用事件处理程序创建适当的元素:

var fn = function() {
            console.log('Event triggered!')
    },
    video = $('<video />', {
        width    : w,
        height   : h,
        autoplay : 'autoplay',
        on       : {
            mouseleave: fn,
            ended     : fn
        }
    }),
    source = $('<source />', {
        src  : src,
        type : 'video/mp4'
    }
);

vidDiv.html( video.append(source) );

【讨论】:

  • 这在某种程度上有效,但回调函数不会触发我得到一个非常奇怪的运行时错误;以下内容:Uncaught SyntaxError: Unexpected token ( 有趣的是,它仅在视频实际播放完毕时触发,因此它似乎正确捕获了事件,但事件处理程序导致错误。
  • 是的,使用完全相同的代码没有任何反应,但是如果我将 on : {...} 切换到 onended:fn 我会收到运行时错误。 jsfiddle 也适用于我。
  • 那我真的不知道,这应该按原样工作,如果没有其他问题。如果鼠标事件正在触发而不是 onended 事件,则某些原因导致该事件无法正确触发,我真的不知道那可能是什么。
  • 是的,我在这里也不知所措。到目前为止,为您提供 +1 的帮助。我知道您的代码有效,但我怀疑其他原因可能会导致此问题。在 chrome 中检查元素时,它看起来像这样:&lt;video autoplay="autoplay" on="[object Object]" style="width: 256px; height: 182px;"&gt;&lt;source src="../assets/test.mp4" type="video/mp4"&gt;&lt;/video&gt; on=... 是保存事件侦听器的对象。我不能比这更检查它。哦,还值得一提的是,这次没有任何事件触发,endedmouseleave
  • 上面的代码不应该在元素上附加事件处理程序,你不应该在 HTML 中看到任何 on= 吗?你用的是什么版本的jQuery。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2010-10-23
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-07-03
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多