ES6 - Animazione

È possibile utilizzare JavaScript per creare un'animazione complessa con, ma non limitato a, i seguenti elementi:

  • Fireworks
  • Effetto dissolvenza
  • Roll-in o roll-out
  • Page-in o Page-out
  • Movimenti di oggetti

In questo capitolo vedremo come utilizzare JavaScript per creare un'animazione.

JavaScript può essere utilizzato per spostare un numero di elementi DOM (<img />, <div> o qualsiasi altro elemento HTML) all'interno della pagina secondo una sorta di modello determinato da un'equazione logica o una funzione.

JavaScript fornisce le seguenti funzioni da utilizzare frequentemente nei programmi di animazione.

  • setTimeout(funzione, durata) - Questa funzione chiama la funzione dopo la durata dei millisecondi da ora.

  • setInterval(funzione, durata) - Questa funzione chiama la funzione dopo ogni millisecondi di durata.

  • clearTimeout(setTimeout_variable) - Questa funzione cancella qualsiasi timer impostato dalla funzione setTimeout ().

JavaScript può anche impostare una serie di attributi di un oggetto DOM inclusa la sua posizione sullo schermo. È possibile impostare gli attributi superiore e sinistro di un oggetto per posizionarlo ovunque sullo schermo. Di seguito è riportata la sintassi per lo stesso.

// Set distance from left edge of the screen.  
object.style.left = distance in pixels or points;    
or  
// Set distance from top edge of the screen.  
object.style.top = distance in pixels or points;

Animazione manuale

Quindi implementiamo una semplice animazione utilizzando le proprietà degli oggetti DOM e le funzioni JavaScript come segue. Il seguente elenco contiene diversi metodi DOM.

  • Stiamo usando la funzione JavaScript getElementById() per ottenere un oggetto DOM e quindi assegnarlo a una variabile globale imgObj.

  • Abbiamo definito una funzione di inizializzazione init() per inizializzare imgObj dove abbiamo impostato la sua posizione e gli attributi left.

  • Stiamo chiamando la funzione di inizializzazione al momento del caricamento della finestra.

  • Stiamo chiamando moveRight()funzione per aumentare la distanza sinistra di 10 pixel. Puoi anche impostarlo su un valore negativo per spostarlo sul lato sinistro.

Esempio

Prova il seguente esempio

<html> 
   <head> 
      <title>JavaScript Animation</title> 
      <script type = "text/javascript"> 
         <!--  
            var imgObj = null; function init(){  
               imgObj = document.getElementById('myImage');
               imgObj.style.position = 'relative';     
               imgObj.style.left = '0px';   
            }     
            function moveRight(){  
               imgObj.style.left = parseInt(
               imgObj.style.left) + 10 + 'px';  
            }  
            window.onload = init;  
            //
         --> 
      </script> 
   </head> 
   
   <body> 
      <form> 
         <img id = "myImage" src = "/images/html.gif" /> 
         <p>Click button below to move the image to right</p> 
         <input type = "button" value = "Click Me" onclick = "moveRight();" /> 
      </form>
   </body>
   
</html>

Animazione automatizzata

Nell'esempio sopra, abbiamo visto come un'immagine si sposta a destra a ogni clic. Possiamo automatizzare questo processo utilizzando la funzione JavaScriptsetTimeout() come segue.

Qui abbiamo aggiunto più metodi. Quindi, vediamo cosa c'è di nuovo qui.

  • Il moveRight() la funzione sta chiamando la funzione setTimeout () per impostare la posizione di imgObj.

  • Abbiamo aggiunto una nuova funzione stop() per cancellare il timer impostato dalla funzione setTimeout () e per impostare l'oggetto nella sua posizione iniziale.

Esempio

Prova il seguente codice di esempio.

<html> 
   <head> 
      <title>JavaScript Animation</title> 
      <script type = "text/javascript"> 
         <!--  
            var imgObj = null; var animate ; function init(){  
               imgObj = document.getElementById('myImage');     
               imgObj.style.position = 'relative';    
               imgObj.style.left = '0px'; 
            }  
            function moveRight(){  
               imgObj.style.left = parseInt(imgObj.style.left) + 10 + 'px';    
               animate = setTimeout(moveRight,20); 
               // call moveRight in 20msec  
            }  
            function stop() {     
               clearTimeout(animate);    
               imgObj.style.left = '0px';   
            }  
            window.onload = init;  
            //
         --> 
      </script> 
   </head> 

   <body> 
      <form> 
         <img id = "myImage" src = "/images/html.gif" /> 
         <p>Click the buttons below to handle animation</p> 
         <input type="button" value="Start" onclick = "moveRight();" /> 
         <input type = "button" value="Stop" onclick = "stop();" /> 
      </form>    
   </body> 
</html>

Rollover con un evento del mouse

Ecco un semplice esempio che mostra il rollover dell'immagine con un evento del mouse.

Vediamo cosa stiamo usando nel seguente esempio:

  • Al momento del caricamento di questa pagina, l'istruzione "if" verifica l'esistenza dell'oggetto immagine. Se l'oggetto immagine non è disponibile, questo blocco non verrà eseguito.

  • Il Image() il costruttore crea e precarica un nuovo oggetto immagine chiamato image1.

  • Il src alla proprietà viene assegnato il nome del file immagine esterno chiamato /images/html.gif.

  • Allo stesso modo, abbiamo creato image2 oggetto e assegnato /images/http.gif in questo oggetto.

  • Il #(segno cancelletto) disabilita il collegamento in modo che il browser non tenti di accedere a un URL quando viene cliccato. Questo collegamento è un'immagine.

  • Il onMouseOver il gestore di eventi viene attivato quando il mouse dell'utente si sposta sul collegamento e il onMouseOut il gestore di eventi viene attivato quando il mouse dell'utente si allontana dal collegamento (immagine).

  • Quando il mouse si sposta sull'immagine, l'immagine HTTP cambia dalla prima immagine alla seconda. Quando il mouse viene allontanato dall'immagine, viene visualizzata l'immagine originale.

  • Quando il mouse viene allontanato dal collegamento, l'immagine iniziale html.gif riapparirà sullo schermo.

<html> 
   <head> 
      <title>Rollover with a Mouse Events</title> 
      <script type = "text/javascript"> 
         <!--  
            if(document.images) {  
               var image1 = new Image();       
               // Preload an image image1.src = "/images/html.gif";  
                  
               var image2 = new Image();       
               // Preload second image image2.src = "/images/http.gif";  
            }  
            //
         -->
      </script> 
   </head> 

   <body> 
      <p>Move your mouse over the image to see the result</p>
      <a href = "#" onMouseOver = "document.myImage.src = image2.src;"      
         onMouseOut = "document.myImage.src = image1.src;"> 
         <img name = "myImage" src = "/images/html.gif" /> 
      </a> 
   </body>
   
</html>