1. Este site usa cookies. Ao continuar a usar este site está a concordar com o nosso uso de cookies. Saber Mais.

Dúvida de JQuery

Discussão em 'Web Development' iniciada por _coelhinha_, 6 de Janeiro de 2013. (Respostas: 8; Visualizações: 804)

  1. _coelhinha_

    _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.
     
  2. barricas

    barricas Power Member

    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).
     
  3. _coelhinha_

    _coelhinha_ Power Member

    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 :/
     
  4. barricas

    barricas Power Member

    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
     
  5. _coelhinha_

    _coelhinha_ Power Member

    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: 6 de Janeiro de 2013
  6. barricas

    barricas Power Member

    Yap.
    Agora que o jquery está up...
    acho que dá assim: $(this).delay(x).queue(function () { //stuff});
     
  7. _coelhinha_

    _coelhinha_ Power Member

    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. ^^
     
  8. metralha761

    metralha761 1st Folding then Sex

    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: 6 de Janeiro de 2013
  9. _coelhinha_

    _coelhinha_ Power Member

    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.
     

Partilhar esta Página