Arrêter youtube intégré iframe?

j'utilise YouTube iframe pour intégrer des vidéos sur mon site.

<iframe width="100%" height="443" class="yvideo" id="p1QgNF6J1h0"
              src="http://www.youtube.com/embed/p1QgNF6J1h0?rel=0&controls=0&hd=1&showinfo=0&enablejsapi=1"
              frameborder="0" allowfullscreen>
</iframe>

et j'ai plusieurs vidéos sur la même page.

je veux les arrêter tous ou l'un d'eux en un clic de bouton en utilisant javascript ou ainsi de suite.

est-ce possible?

mise à jour:

j'ai essayé ce que Talvi Watia dit et utilisé:

$('#myStopClickButton').click(function(){
  $('.yvideo').each(function(){
    $(this).stopVideo();
  });
});

je suis getting:

Uncaught TypeError: Object [object Object] has no method 'stopVideo' 
30
demandé sur Danpe 2013-03-01 23:00:00

10 réponses

vous pouvez vouloir examiner par le Youtube JavaScript API docs de référence.

lorsque vous intégrez votre(s) vidéo (s) sur la page, vous devez passer ce paramètre:

http://www.youtube.com/v/VIDEO_ID?version=3&enablejsapi=1

si vous voulez un bouton Arrêter toutes les vidéos, vous pouvez configurer une routine javascript pour boucler vos vidéos et les arrêter:

player.stopVideo()

cela implique de garder une trace de tous les identifiants de page pour chaque vidéo sur le page. Encore plus simple pourrait être de faire une classe et puis utiliser jQuery.chacun.

$('#myStopClickButton').click(function(){
  $('.myVideoClass').each(function(){
    $(this).stopVideo();
  });
});
10
répondu Talvi Watia 2013-03-01 19:15:29

malheureusement ces API évoluent très vite. Depuis mai 2015, les solutions proposées ne fonctionnent plus, car l'objet player n'a plus de méthode stopVideo.

une solution fiable est à trouver dans cette page ( 1 ) et il fonctionne avec un:

<iframe id="youtube_player" class="yt_player_iframe" width="640" height="360" src="http://www.youtube.com/embed/aHUBlv5_K8Y?enablejsapi=1&version=3&playerapiid=ytplayer"  allowfullscreen="true" allowscriptaccess="always" frameborder="0"></iframe>

et le code JS / jQuery suivant:

$('.yt_player_iframe').each(function(){
  this.contentWindow.postMessage('{"event":"command","func":"stopVideo","args":""}', '*')
});

modifié pour changer de classe

45
répondu Marco Faustinelli 2018-09-26 13:23:29

Si quelqu'un est toujours à la recherche de la réponse, je l'ai résolu comme suit:

$("#photos").on("hide",function(){
    var leg=$('.videoPlayer').attr("src");
    $('.videoPlayer').attr("src",leg);
});

où #photos est L'ID du modal et .videoPlayer est la classe de l'iframe. Fondamentalement, il rafraîchit l'attribut src (et arrête de lire la vidéo). So,

    $('#myStopClickButton').click(function(){
      $('.yvideo').each(function(){
        var el_src = $(this).attr("src");
        $(this).attr("src",el_src);
      });
    });

devrait faire l'affaire.

23
répondu Jax297 2016-03-30 15:20:46

la réponse de Talvi peut encore fonctionner, mais L'API Javascript de Youtube a été marquée comme étant dépréciée. Vous devez maintenant utiliser le nouveau Youtube iframe API .

la documentation fournit quelques façons d'effectuer l'intégration vidéo, mais pour votre but, vous devez inclure ce qui suit:

//load the IFrame Player API code asynchronously
var tag = document.createElement('script');

tag.src = "https://www.youtube.com/iframe_api";
var firstScriptTag = document.getElementsByTagName('script')[0];
firstScriptTag.parentNode.insertBefore(tag, firstScriptTag);

//will be youtube player references once API is loaded
var players = [];

//gets called once the player API has loaded
function onYouTubeIframeAPIReady() {
    $('.myiframeclass').each(function() {
        var frame = $(this);

        //create each instance using the individual iframe id
        var player = new YT.Player(frame.attr('id'));

        players.push(player);
    });
}

//global stop button click handler
$('#mybutton').click(function(){

    //loop through each Youtube player instance and call stopVideo()
    for (var i in players) {
        var player = players[i];
        player.stopVideo();
    }
});
13
répondu HotN 2015-03-23 20:53:04

les API sont désordonnées parce qu'elles ne cessent de changer. Cette façon javascript pur a fonctionné pour moi:

 <div id="divScope" class="boom-lightbox" style="display: none;">
    <iframe id="ytplayer" width="720" height="405"   src="https://www.youtube.com/embed/M7lc1UVf-VE" frameborder="0" allowfullscreen>    </iframe>
  </div>  

//if I want i can set scope to a specific region
var myScope = document.getElementById('divScope');      
//otherwise set scope as the entire document
//var myScope = document;

//if there is an iframe inside maybe embedded multimedia video/audio, we should reload so it stops playing
var iframes = myScope.getElementsByTagName("iframe");
if (iframes != null) {
    for (var i = 0; i < iframes.length; i++) {
        iframes[i].src = iframes[i].src; //causes a reload so it stops playing, music, video, etc.
    }
}
8
répondu JJ_Coder4Hire 2016-04-21 23:42:44

il y a un codepen d'un utilisateur nommé" CAPTAIN ANONYMOUS " il a fonctionné pour moi-mais je dois donner crédit où il est dû-je poste ici parce que je cherchais la solution la plus simple pour intégrer la vidéo YT dans l'iframe. et je pense que le poster aidera quelqu'un d'autre à passer moins de temps à chercher.

ce dont j'avais besoin, c'était que la vidéo apparaisse dans une fenêtre modale et cesse de jouer quand elle était fermée

alors voici la magie: https://codepen.io/anon/pen/GBjqQr

    <div><a href="#" class="play-video">Play Video</a></div>
    <div><a href="#" class="stop-video">Stop Video</a></div>
    <div><a href="#" class="pause-video">Pause Video</a></div>

    <iframe class="youtube-video" width="560" height="315" src="https://www.youtube.com/embed/glEiPXAYE-U?enablejsapi=1&version=3&playerapiid=ytplayer" frameborder="0" allowfullscreen></iframe>

$('a.play-video').click(function(){
    $('.youtube-video')[0].contentWindow.postMessage('{"event":"command","func":"' + 'playVideo' + '","args":""}', '*');
});

$('a.stop-video').click(function(){
    $('.youtube-video')[0].contentWindow.postMessage('{"event":"command","func":"' + 'stopVideo' + '","args":""}', '*');
});

$('a.pause-video').click(function(){
    $('.youtube-video')[0].contentWindow.postMessage('{"event":"command","func":"' + 'pauseVideo' + '","args":""}', '*');
});

en outre, si vous voulez QU'il AUTOPLAY dans un objet dom qui n'est pas encore visible, comme une fenêtre modale, si j'ai utilisé le même bouton pour lire la vidéo que j'ai utilisé pour montrer le modal, il ne fonctionnerait pas donc je l'ai utilisé:

https://www.youtube.com/embed/EzAGZCPSOfg?autoplay=1&enablejsapi=1&version=3&playerapiid=ytplayer

Note:?autoplay=1& où il est placé et l'utilisation du '&' devant la propriété suivante pour permettre à la pause pour continuer à travailler.

4
répondu namretiolnave 2018-07-19 18:11:21

on ne peut pas simplement surestimer ce message et répond thx OP et helpers. Ma solution avec juste video_id échanger:

<div style="pointer-events: none;">
    <iframe id="myVideo" src="https://www.youtube.com/embed/video_id?rel=0&modestbranding=1&fs=0&controls=0&autoplay=1&showinfo=0&version=3&enablejsapi=1" width="560" height="315" frameborder="0"></iframe> </div>

    <button id="play">PLAY</button>

    <button id="pause">PAUSE</button>


    <script>
        $('#play').click(function() {
            $('#myVideo').each(function(){ 
                var frame = document.getElementById("myVideo");
                frame.contentWindow.postMessage(
                    '{"event":"command","func":"playVideo","args":""}', 
                    '*'); 
            });
        });

        $('#pause').click(function() {
            $('#myVideo').each(function(){ 
                var frame = document.getElementById("myVideo");
                frame.contentWindow.postMessage(
                  '{"event":"command","func":"pauseVideo","args":""}',
                  '*'); 
            });
        });
    </script>
3
répondu Aleksander Dudek 2017-09-13 15:26:04

le plus facile est

var frame = document.getElementById("iframeid");
frame.contentWindow.postMessage('{"event":"command","func":"pauseVideo","args":""}', '*');
1
répondu imal hasaranga perera 2017-03-18 15:52:23

voir aussi Comment mettre en pause ou d'arrêter un iframe vidéo youtube, lorsque vous laissez un onglet de la vue ou de minimiser votre Ionique App

$scope.stopVideo = function() {
 var iframe = document.getElementsByTagName("iframe")[0].contentWindow;
 iframe.postMessage('{"event":"command","func":"'+'stopVideo'+   '","args":""}', '*');
 }
0
répondu sona 2017-05-23 11:55:07

$('#aboutVideo .close').on('click',function(){
			var reSrc = $('.aboutPlayer').attr("src");
			$('.aboutPlayer').attr("src",reSrc)
		})
#aboutVideo{
	width: 100%;
	height: 100%;
}
#aboutVideo .modal-dialog, #aboutVideo .modal-dialog .modal-content, #aboutVideo .modal-dialog .modal-content .modal-body{
	width: 100%;
	height: 100%;
	margin: 0 !important;
	padding: 0 !important;
}
#aboutVideo .modal-header{
	padding: 0px; 
	border-bottom: 0px solid #e5e5e5; 
	position: absolute;
	right: 4%;
	top: 4%;
}
#aboutVideo .modal-header .close{
	opacity: 1;
	position: absolute;
	z-index: 99;
	color: #fff;
}
#aboutVideo .modal-header button.close{
      border-radius: 50%;
    width: 7vw;
    height: 7vw;
    position: absolute;
    right: 4%;
    top: 7%;
    background: aliceblue;
}
#aboutVideo .modal-header button.close:hover{
	background-color: rgba(255, 255, 255, 0.28);
}
#aboutVideo .modal-header button.close img{
	width: 20px;
	margin-top: -0.2vw;
}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<!-- Latest compiled and minified CSS -->
<link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.7/css/bootstrap.min.css" integrity="sha384-BVYiiSIFeK1dGmJRAkycuHAHRg32OmUcww7on3RYdg4Va+PmSTsz/K68vbdEjh4u" crossorigin="anonymous">

<!-- Optional theme -->
<link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.7/css/bootstrap-theme.min.css" integrity="sha384-rHyoN1iRsVXV4nD0JutlnGaslCJuC7uwjduW9SVrLvRYooPp2bWYgmgJQIXwl/Sp" crossorigin="anonymous">

<!-- Latest compiled and minified JavaScript -->
<script src="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.7/js/bootstrap.min.js" integrity="sha384-Tc5IQib027qvyjSMfHjOMaLkfuWVxZxUPnCJA7l2mCWNIpG9mGCD8wGNIcPD7Txa" crossorigin="anonymous"></script>
<li class="see-video fa" type="button" data-toggle="modal" data-target="#aboutVideo">
			<label>SEE VIDEO</label>
		</li>
<div class="modal fade" id="aboutVideo" tabindex="-1" role="dialog" aria-labelledby="aboutVideoLabel">
		<div class="modal-dialog" role="document">
			<div class="modal-content">
				<div class="modal-header">
					<button type="button" class="close" data-dismiss="modal" aria-label="Close"><span aria-hidden="true"><img src="http://www.freeiconspng.com/uploads/white-close-button-png-16.png"></span></button>
				</div>
				<div class="modal-body">
				<iframe class="aboutPlayer" width="100%" height="100%" src="https://www.youtube.com/embed/fju9ii8YsGs?autoplay=0&showinfo=0&controls=2&rel=0" frameborder="0" allowfullscreen poster="https://www.google.co.in/url?sa=i&rct=j&q=&esrc=s&source=images&cd=&cad=rja&uact=8&ved=0ahUKEwiOvaagmqfWAhUHMY8KHUuJCnkQjRwIBw&url=http%3A%2F%2Fnodeframework.com%2F&psig=AFQjCNEaHveDtZ81veNPSvQDx4IqaE_Tzw&ust=1505565378467268"></iframe>
				</div>
			</div>
		</div>
	</div>
0
répondu Jomin George Paul 2017-09-15 12:41:09