SoundCloud players have a default functionality where when a user starts a player, it automatically pauses all others that are currently playing. (example: http://jsfiddle.net/Vx6hM/).
I'm trying to recreate this with embedded youtube videos that are added dynamically via the normal embed code.
Using this: https://stackoverflow.com/a/7513356/938089 and this: https://stackoverflow.com/a/7988536/1470827
I'm able to get this far:
function chain(){
$('.post').each(function(){
var player_id = $(this).children('iframe').attr("id");
var other_player_id = $(this).siblings().children('iframe').attr("id");
player = new YT.Player( player_id, {
events:
{
'onStateChange': function (event)
{
if (event.data == YT.PlayerState.PLAYING)
{ callPlayer( other_player_id , 'pauseVideo' );
alert('Trying to pause: ' + other_player_id);
}
}
}
});
});
}
Here's a JS Bin with it half working: http://jsbin.com/oxoyes/2/edit
Currently, its only calling one of the players. I need it to pause ALL of the other players except the playing one.
Also, any tips on how to clean this up and/or do it differently/better are welcome. I'm still very new to javascript so I'm not even sure I'm going about it the right way.
Thanks!
You'll only have at most one player playing at a given time. Instead of trying to pause all that are playing, think of it as trying to pause the one playing. Of course, none could be playing. Given this, take a look at the following code. You maintain a single outer scope variable and pause that when necessary, while setting it to the player you just started playing thereafter.
I think this might achieve your solution
the problem with your previous code was that you where using each in call function so it might execute 3*3 times so creating 9 instances of the player.So what i have done is that i am storing each instance in an array.
demo: http://jsbin.com/oxoyes/11/edit
I tried the way posted by cbayram and found it to have spotty success. I preferred fuzionpro's way but had to correct a few problems w/ it and I came up w/ the following, which works well and includes console.logs so you can see whats happening. Probably combining ytPlayers and ytPlayerStates below would make it more efficient.