Dúvida de JQuery

_coelhinha_

Power Member
Boa noite,

É o seguinte estou a tentar fazer uma coisa bastante simples mas não estou a conseguir, portanto a ideia é ter um each que vai percorrendo um array mas enquanto está a ler cada posição do array quero que ele faça umas certas acções e depois ai sim passa para o elemento seguinte. Experimentei usar os timmers mas ele não para, está a avançar na mesma. Como posso remediar esta situação?

Aqui fica um bocado do código para perceberem o que estou a tentar fazer
Código:
var $content;            var $total;
        
                $.ajax({
                type: "GET",
                async:false,
                url: "server/php/getVideoInfo.php",
                data: "video=../"+ intro,
                success: function(result) {
                    
                    
                    $total = Number(result) + Number(5*1000); //Recebe o tempo total do video em mili
                    
                    $content = '<video width = "800px" height = "600px" controls autoplay><source src = "' + 'server/' + intro + '"></video>'; //intro


                    $.fancybox.open($content);


                    //Define um timer para que quando o video chegar ao fim
                    //Fecha o popup e abra um novo com o fundo
                    setTimeout(function () {
                        //Fecha o video
                        $.fancybox.close(true);
                        
                        $content = '<img src="server/' + fundo + '">'; //Fundo
                    
                        //Abre o fundo
                        $.fancybox.open($content);
                        
                        //Fecha o fundo apos 5segundos
                        setTimeout(function () {
                            $.fancybox.close(true);
                        }, 10*1000); //Fim do timer do fundo
                    }, $total); //Fim do timer da intro
                    
                
                }
            });

Obrigado.
 
Já experimentaste em vez da setTimeout ter um $(this).delay(tempoaqui) ?

Não posso dizer muito mais dado que o site do jquery está down (nem sei se o .delay funciona assim sozinho) e eu costumo usar a documentação deles para ver os métodos.
Tive a ver e pelos vistos o setTimeout tem bug dentro de um .each() (penso que seja o each() que referes).
 
Pelo que tive a ler o bug do setTimeOut é que é sp instanciado ao mesmo tempo, ou seja, se eu criar um timer para X e outro para Y vai diferir por milisegundos. :/ O delay é capaz de levantar o mesmo problema, porque ai o tempo é fixo, e no meu caso o tempo é calculado através de um pedido ajax :/
 
o que eu referia era em vez de

setTimeout(function() { //stuff }, $total );

era

$(this).delay(tempocalculado);

// resto código

---

Mas visto que acontece o que referiste vai dar ao mesmo provavelmente :s
 
Não sei se isso faz o que pretendo, mas amanhã experimento. Hoje já não estou com cabeça, depois dou feedback :)

Edit: Tava aqui a ver e não vai dar porque o delay é associado a ***** coisa, e eu tenho um conjunto de funções que quero atrasar. :/
 
Última edição:
Tive a experimentar com o delay().queue e não consegui fazer o que pretendia, mas tentei fazer com o setTimeOut e estou quase a conseguir o que pretendo :)

Para o caso de alguém ter o mesmo problema, fica aqui o pseudo código da resolução do problema:

Defini uma variável timer que é inicializada a 0, entra no each o primeiro timer é definido a 0 após executar o código pretendido o timer é incrementado, para que no próximo elemento do each o timer em vez de começar em 0, começa ontem acaba o timer anterior. Ainda não faz totalmente o pretendido porque utilizo vários timers, agora é uma questão de afinação. ^^
 
o que procuras não será setInterval()?

Ok esquece, reli melhor e penso que o que precisas é de recursividade. Digo desde já que é preciso algum jogo mental.

Aqui tens um exemplo, um relogio:
function startTime()
{
var today=new Date();
var h=today.getHours();
var m=today.getMinutes();
var s=today.getSeconds();
// add a zero in front of numbers<10
m=checkTime(m);
s=checkTime(s);
document.getElementById('txt').innerHTML=h+":"+m+":"+s;
t=setTimeout(function(){startTime()},500);
}
 
Última edição:
o que procuras não será setInterval()?

Não, porque os tempos variam :)

Pelo que tive a ler o setInterval() executa uma determinada função de X em X tempo e não é isso que me interessa. Realmente chamo uma função várias vezes mas o tempo não é constante, é calculado e isso não dá para o uso do setInterval() e para além disso, o conteúdo também altera.
 
Back
Topo