单击链接时停止所有播放 iframe 视频 javascript

IT技术 javascript jquery video iframe
2021-03-12 21:48:37

我的网页中有 iframe 视频列表。

<iframe width="520" height="360" src="http://www.youtube.com/embed/2muxrT5_a6E" frameborder="0" allowfullscreen></iframe>
<iframe width="520" height="360" src="http://www.youtube.com/embed/2muxrT5_a6E" frameborder="0" allowfullscreen></iframe>
<iframe width="520" height="360" src="http://www.youtube.com/embed/2muxrT5_a6E" frameborder="0" allowfullscreen></iframe>
<a href="#" class="close">Stop all videos</a>

我需要在单击链接时停止所有播放 iframe 视频Stop all videos我怎样才能做到这一点?

6个回答

试试这个方法

<script language="javascript" type="text/javascript" src="jquery-1.8.2.js"></script>
<script language="javascript" type="text/javascript">
$(function(){
    $('.close').click(function(){      
        $('iframe').attr('src', $('iframe').attr('src'));
    });
});
</script>
iframe 速度较慢,因为浏览器有额外的开销。
2021-04-21 21:48:37
行。非常感谢。一项额外的帮助。如何检查视频是否处于播放状态的 iframe 视频状态?
2021-04-21 21:48:37
您需要使用 iframe 嵌入的 YouTube 播放器 API 参考。stackoverflow.com/questions/8950146/... 中有一个很好的答案,谷歌对 API 的引用在这里developers.google.com/youtube/iframe_api_reference
2021-04-22 21:48:37
并且您的来源也来自外部网站
2021-05-02 21:48:37
它工作正常。但问题是重新加载所有视频需要很长时间。有没有其他方法或者我可以使重新加载更快?
2021-05-10 21:48:37

重新加载所有 iframe 只是为了阻止它们是一个糟糕的主意。您应该利用 HTML5 附带的功能。

不使用 YouTube 的 iframe_API 库;你可以简单地使用:

var stopAllYouTubeVideos = () => { 
  var iframes = document.querySelectorAll('iframe');
  Array.prototype.forEach.call(iframes, iframe => { 
    iframe.contentWindow.postMessage(JSON.stringify({ event: 'command', 
  func: 'stopVideo' }), '*');
 });
}
stopAllYouTubeVideos();

这将停止所有 YouTube 的 iframe 视频。

您可以使用这些消息关键字来启动/停止/暂停 youtube 嵌入的视频:

stopVideo
playVideo
pauseVideo

查看下面的链接以获取现场演示:

https://codepen.io/mcakir/pen/JpQpwm

PS- YouTube URL 必须具有?enablejsapi=1查询参数才能使此解决方案起作用。

这是用于停止一个视频的单线,也适用于 MSIE: document.getElementById('_video').contentWindow.postMessage(JSON.stringify({ event: 'command', func: 'stopVideo' }), '*' );
2021-05-07 21:48:37
厉害了,谢谢 在此页面上的所有解决方案中,只有此解决方案有效而不会导致页面上的其他动画闪烁。
2021-05-11 21:48:37

这应该停止在页面上的所有 iframe 中播放所有视频:

$("iframe").each(function() { 
        var src= $(this).attr('src');
        $(this).attr('src',src);  
});
完美,此代码将适用于页面上的不同视频。谢谢。
2021-04-24 21:48:37

停止意味着暂停并将视频设置为时间 0:

        $('iframe').contents().find('video').each(function () 
        {
            this.currentTime = 0;
            this.pause();
        });

这个 jquery 代码将完全做到这一点。

无需替换 src 属性并再次重新加载视频。


我在项目中使用的小功能:

    function pauseAllVideos() 
    { 
        $('iframe').contents().find('video').each(function () 
        {
            this.pause();
        });
        $('video').each(function () 
        {
            this.pause();
        });
    }
删除 src 并将其添加回来已经将视频重置为开始,
2021-04-22 21:48:37
iframe 内容和应用程序必须在同一个域中!
2021-04-29 21:48:37
它适用于我所有的项目。我已经添加了我在上面使用的功能。
2021-05-04 21:48:37
它拒绝访问“文档”的权限
2021-05-14 21:48:37
完美的脚本兄弟:D
2021-05-17 21:48:37

这是 2019 年的原生 Javascript 解决方案

const videos = document.querySelectorAll('iframe')
const close = document.querySelector('.close')

close.addEventListener('click', () => {
   videos.forEach(i => {
      const source = i.src
      i.src = ''
      i.src = source
   })
})
伟大而优雅的答案!
2021-05-11 21:48:37
它在带有 Bootstrap carousel 的 ReactJS 中工作正常。
2021-05-13 21:48:37
为我在同一页面上的多个视频工作。
2021-05-19 21:48:37