Visualizzazione dei risultati da 1 a 8 su 8
  1. #1
    Utente di HTML.it
    Registrato dal
    Feb 2007
    Messaggi
    76

    setTimeout() non funzionante

    hola mastri web,

    sto cercando di implementare un semplice script che mi faccia fare un effetto slide ad un div


    codice:
    <html>
    <head><title></title>
    
    <script type="text/javascript" language="javascript">
    //<![CDATA[
    var rightPosition=50;
    var leftPosition=-150;
    
    function horizontalSlide(idDivToSlide){
             var slidingDiv = document.getElementById(idDivToSlide);
    
             if(parseInt(slidingDiv.style.left) == rightPosition){
                while(parseInt(slidingDiv.style.left) > leftPosition){
                        setTimeout('nop()', 1000);
                        slidingDiv.style.left = parseInt(slidingDiv.style.left) - 2 + "px";
                }
             }
             else{
                while(parseInt(slidingDiv.style.left) < rightPosition){
                        setTimeout("nop()", 1000);
                        slidingDiv.style.left = parseInt(slidingDiv.style.left) + 2 + "px";
                }
             }
    }
    
    function nop(){}
    
    //]]>
    </script>
    </head>
    <body>
    
    <div id="d2" onclick="horizontalSlide('d1');">click here to slide the div</div>
    <div id="d1" style="position:absolute; left:-150px; top:30px">horizontally sliding div</div>
    
    </body>
    </html>

    l'effetto di questa paginetta non è quello desiderato.
    Il div che dovrebbe scorrere, compare e scompare senza l'effetto slide.

    Di conseguenza sembra che la funzione setTimeout non faccia il suo sporco lavoro.....dove sbaglio?

  2. #2
    Forse:

    codice:
    setTimeout(nop(), 1000);

  3. #3
    Utente di HTML.it
    Registrato dal
    Feb 2007
    Messaggi
    76
    setTimeout prende in ingresso una stringa e un intero (se non erro)

  4. #4
    Utente di HTML.it L'avatar di Xinod
    Registrato dal
    Sep 2000
    Messaggi
    13,649
    il while e' sicuramente sbagliato, non puoi usare cicli e simili come passi di un' animazione

  5. #5
    Utente di HTML.it
    Registrato dal
    Feb 2007
    Messaggi
    76
    ma scusa, tecnicamente la funzione setTimeout non dovrebbe attendere x millisecondi prima di eseguire quello scritto nel primo parametro? mi sbaglio? il fatto utilizzo il while cosa cambia?

  6. #6
    Utente di HTML.it L'avatar di Xinod
    Registrato dal
    Sep 2000
    Messaggi
    13,649
    tu non vedi i passi dell' animazione perche' la velocita' a cui viene eseguito un while non permette di aggiornare quel valore dell' attributo dello stile che cerchi di modificare

    intanto accodi un' infinita' di nop() da eseguire ...finche' il browser ti sta dietro

  7. #7
    Utente di HTML.it
    Registrato dal
    Feb 2007
    Messaggi
    76
    mhmh continuo a non capire, nel senso....(ho capito quello che mi stai dicendo ma non capisto il perche)....
    javascript non è un linguaggio procedurale? tecnicamente non esegue l'istruzione successiva prima di aver eseguito quella corrente? di conseguenza l'istruzione successiva del while dovrebbe attendere l'esecuzione del setTimeout (che viene eseguita dopo 1000ms) no?

  8. #8
    Utente di HTML.it
    Registrato dal
    Feb 2007
    Messaggi
    76
    azz, ho provato a sostituire la chiamata nop() con un alert.

    risultato: mi esegue gli alert dopo un secondo l'uno dall'altro, di conseguenza suppongo che setTimeout apre un nuovo thread senza bloccare l'esecuzione della funzione.....mannaggiaupatataun !!!!

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2024 vBulletin Solutions, Inc. All rights reserved.