Visualizzazione dei risultati da 1 a 3 su 3
  1. #1

    Semplice animazione che non funziona

    Ho scritto un codice di test per capire dov'è che sbaglio nella realizzazione di un'animazione all'interno di un mio script.

    codice:
    <div id="box" style="background: #FF0000; height: 200px; width: 200px;"></div>
    <script type="text/javascript">
    var timeline = 100
    var l = 0
    while (l < 300) {
    	l = l + 1
    	var t =setTimeout(document.write("test 
    "), timeline)
    	timeline = timeline + 100
    }
    </script>
    Quello che voglio ottenere qui è che il box si sposti lentamente verso destra fino a fermarsi a 300px dal limite sinistro della pagina.

    Il risultato però è diverso. Il box comprare per un appena percettibile istante tutto a sinistra, ma un attimo dopo si sposta 300px più a destra in un colpo solo, senza animazione.

    Dove sbaglio?
    Amico io non sono Lebowsky, nessuno mi chiama Lebowsky! Chiamami Drugo

  2. #2
    Utente di HTML.it L'avatar di Xinod
    Registrato dal
    Sep 2000
    Messaggi
    13,649
    non puoi usare for o while nelle animazioni, il browser mostrera' solo il risultato finale
    settare un' infinita' di timeout nel mentre non aiuta di certo

    usa solo setTimeout o setInterval

    per sommi capi, scrivi una funzione che
    - legge il valore della proprieta' da animare (ricava l' intero del valore se necessario prima di fare operazioni con esso)
    - se aumentandolo di tot non supera un limite massimo
    -- setta la proprieta' con il valore modificato
    -- se l' animazione e' basata su timeout, setta un timeout che richiami la funzione stessa
    - altrimenti
    -- setta la proprieta' con il valore massimo
    -- se l' animazione e' basata su interval puliscilo

    quando vuoi avviare l' animazione richiama la funzione se hai un setTimeout all' interno di essa o setta l' interval

  3. #3
    Ok, ora funge!

    codice:
    <div id="box" style="background: #FF0000; height: 200px; width: 200px;"></div>
    <script type="text/javascript">
    var timeline = 20
    var l = 0
    function slidelabel() {
    	l = l + 1
    	//timeline += 10
    	document.getElementById('box').style.marginLeft = l + 'px'
    
    	//alert(document.getElementById('box').style.marginLeft)
    	if (l < 300) var t = setTimeout("slidelabel()", timeline)
    	else clearTimeout(t)
    }
    slidelabel()
    </script>
    Tra l'altro la prima funzione che ho riportato, nell'apertura del thread, non era proprio inerente alla descrizione, per via di alcune modifiche fatte per dei tentativi di debug, poi rimasti nell'esempio.

    Grazie. A presto!
    Amico io non sono Lebowsky, nessuno mi chiama Lebowsky! Chiamami Drugo

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 © 2025 vBulletin Solutions, Inc. All rights reserved.