使用jQuery get(0)索引暂停和播放多个HTML5video?
我有几个video的页面。 可以单击缩略图来播放每个video。 问题是对于超过2个video,点击第3个缩略图不会暂停第2个video,所以我同时播放了2个video。 我还使用fadeOut()
切换每个video的可见性,无论video数量多少,这都可以正常工作。 因此,我认为问题在于代码的get(0)
部分。
这是一个显示问题的jsfiddle: http : //jsfiddle.net/trpeters1/EyZdy/28/
此外,这里有一个更详细的代码块,可以解决问题:
$(function(){ $('#video_1,#video_2,#video_3,#video_4,#video_5,#video_6').hide(); $('.icon_1').click(function(){ $('#video_2,#video_3,#video_4,#video_5,#video_6').fadeOut(function(){ $('#video_1').fadeIn(); $('.video_2,.video_3,.video_4,.video_5,.video_6').get(0).pause(); $('.video_2,.video_3,.video_4,.video_5,.video_6').get(0).currentTime = 0; $('.video_1').get(0).play(); }); }); $('.icon_2').click(function(){ $('#video_1,#video_3,#video_4,#video_5,#video_6').fadeOut(function(){ $('#video_2').fadeIn(); $('.video_1,.video_2,.video_4,.video_5,.video_6').get(0).pause(); $('.video_1,.video_2,.video_4,.video_5,.video_6').get(0).currentTime = 0; $('.video_2').get(0).play(); }); }); $('.icon_3').click(function(){ $('#video_1,#video_2,#video_4,#video_5,#video_6').fadeOut(function(){ $('#video_3').fadeIn(); $('.video_1,.video_2,.video_4,.video_5,.video_6').get(0).pause(); $('.video_1,.video_2,.video_4,.video_5,.video_6').get(0).currentTime = 0; $('.video_3').get(0).play(); }); }); });
和HTML:
cadillac nike russian standard
执行以下操作时:
$('.video_2,.video_3,.video_4,.video_5,.video_6').get(0)
“get(0)”返回与选择器匹配的第一个元素 – 在这种情况下,只是匹配“.video_2”的第一个元素。 其余video将被忽略。 要对所有选定的元素执行操作,请查看jQuery的“ each() ”方法。 此外,您可以通过执行以下操作将代码简化为更通用的方法:
Video 1 Video 2
然后通过做这样的事情来连接JS:
$('.video-thumbnail').on('click', function () { // Just go ahead and pause/reset all the video elements $('video').each(function () { this.pause(); this.currentTime = 0; }); $('#' + $(this).data('video-id')).get(0).play(); });
我刚从头脑中输入了这个,但希望它会让你朝着正确的方向前进。
感谢P1aincloth3sM4n,我按照你所说的关于重置所有video和制作更通用的解决方案,对于有兴趣的人请看下面的工作jsfiddle: http : //jsfiddle.net/trpeters1/EyZdy/52
使用JQUERY在页面上只播放一个HTML5video元素的简单解决方案:
$(function() { $("video").each(function() { this.pauseOthers = function(event) { $('video').addClass('stopvideo'); $(this).removeClass('stopvideo'); $('.stopvideo').each(function() { this.pause(); }); }; this.addEventListener("play", this.pauseOthers.bind(this), false); }); });