Eu tenho um script que esconde ou mostra um elemento após um número de segundos se passaram. Os elementos são todos dão a classe .show-after-x-seconds
ou .hide-after-x-seconds
e um atributo chamado data_seconds
com o número de segundos.
Os primeiros itera percorrer todos os elementos com essa classe, mas o segundo ciclo parece ser ignorado. Eu tentei mudar sua ordem e apenas os primeiros executa laço.
<div class=hide-after-x-seconds data_seconds=2>
<img src=/static/img1.png>
</div>
<div class=show-after-x-seconds style=display: none data_seconds=4>
<img src=/static/img2.png>
</div>
var show_these = $('.show-after-x-seconds');
for(var show in show_these) {
show_this(show_these[show], parseInt(show_these[show].attributes.data_seconds.value));
}
var hide_these = $('.hide-after-x-seconds');
for(var hide in hide_these) {
hide_this(hide_these[hide], parseInt(hide_these[hide].attributes.data_seconds.value));
}
function sleep(ms) {
return new Promise(resolve => setTimeout(resolve, ms));
}
function hide_this(element_to_hide, x){
sleep(x *1000).then(() => {
element_to_hide.style.display = 'none';
})
}
function show_this(element_to_show, x){
sleep(x *1000).then(() => {
element_to_show.style.display = 'block';
})
}