Tengo una matriz de cadenas y quiero definir cada una de estas cadenas como un valor. Una ilustración simple sería
varString = "Hello"; eval(varString + " = 9"); console.log(Hello); Donde espero obtener 9 para Hello . Que obviamente está funcionando. ¡Pero me pregunto si hay una versión más ordenada de eso!
¡Ahora, te estarás preguntando por qué lo hago! La razón principal es que estoy tratando de "setPlaybackRate" para varios videos de YouTube incrustados en mi HTML.
var player; function onYouTubeIframeAPIReady() { for (let index = 0; index < IDYT.length; index++) { element = IDYT[index]; object1 = Objects1(youtubeVideo[index], YTtime[index]); player = new YT.Player(element, object1); } } donde, como puede ver, el player se define fuera de la función onYouTubeIframeAPIReady() cada una de las funciones de Objects1 y el IDYT se definen de la siguiente manera
function Objects1(videoId1, startID1) { let object1 = { height: "315", width: "560", videoId: videoId1, playerVars: { autoplay: 0, loop: 1, start: startID1, // mute: 1, }, events: { onStateChange: Test1, }, }; return object1; }y
let IDYT = ["player", "player1"]; let youtubeVideo = ["00vnln25HBg", "E-xMXv3L5L8"]; let YTtime = [20, 456]; Pero el problema es cuando se inicia el evento, es decir, la función onPlayerStateChange dada por:
function onPlayerStateChange() { player.setPlaybackRate(1.5); } Solo el último video de YouTube tiene una tasa de reproducción establecida de 1.5, lo cual no esperaba. Creo que esto se debe principalmente a que solo se define la última variable del player . Si pudiera hacer un ciclo de cadenas que se cambian a variables que podrían ayudar. Agradecería mucho que me orientaran sobre cómo solucionar este problema.
Muchas gracias de antemano.
Enlaces útiles: https://developers.google.com/youtube/iframe_api_reference
Sí, su intuición es correcta de que solo se cambia el último jugador porque el siguiente jugador anula a los demás.
Una solución muy simple sería mantener una matriz de players .
const players = []; function onYouTubeIframeAPIReady() { for (let index = 0; index < IDYT.length; index++) { element = IDYT[index]; object1 = Objects1(youtubeVideo[index], YTtime[index]); players.push(new YT.Player(element, object1)); } } // ..... // ...... function onPlayerStateChange() { players.forEach((player) => player.setPlaybackRate(1.5)); }