Isso acontece porque em nenhum momento você interrompe o setInterval
.
Talvez seja mais simples usar setTimeout
, que só executa uma vez. Assim, vc verifica se os vídeos estão pausados, e se todos estiverem, aí vc chama setTimeout
de novo.
Também não ficou claro de onde vem esse depVideos
, acho que deveria usar o videos
, não? Enfim, seria algo assim:
var videos = document.querySelectorAll(".video");
function todosPausados() {
for (var i = 0; i < videos.length; i++) {
if (!videos[i].paused) {
return false; // se um não está pausado, já retorna (nem precisa ver os outros)
}
}
// se chegou aqui, é porque todos estão pausados
return true;
}
function alerta() {
if (todosPausados()) {
console.log('Todos os vídeos estão pausados');
// só chama de novo se todos estão pausados
setTimeout(alerta, 2000);
}
}
// chama a primeira vez
setTimeout(alerta, 2000);
Ou seja, se todos estiverem pausados, ele chama novamente a função depois de 2 segundos. Se pelo menos um não estiver pausado, ele não chama mais.
O detalhe é que se os vídeos forem pausados novamente, ele não vai mais verificar de novo. Mas se quiser que volte a verificar, pode usar setInterval
, fica assim:
var videos = document.querySelectorAll(".video");
function todosPausados() {
for (var i = 0; i < videos.length; i++) {
if (!videos[i].paused) {
return false; // se um não está pausado, já retorna (nem precisa ver os outros)
}
}
// se chegou aqui, é porque todos estão pausados
return true;
}
function alerta() {
if (todosPausados()) {
console.log('Todos os vídeos estão pausados');
}
}
setInterval(alerta, 2000);
A diferença é que agora ele fica verificando “pra sempre” a cada 2 segundos.