libri-javascript-python

In questo esempio creiamo un Background animato in JS con i canvas.

Abbiamo creato una funzione createStars() per generare le stelle, una funzione drawStars() per disegnarle, una funzione moveStars() per muoverle e una funzione drawSky() per disegnare lo sfondo. Infine, abbiamo utilizzato la funzione animate() per animare l’intero sfondo.

Possiamo sviluppare l’esercizio in tantissimi altri modi io vi propongo una possibile soluzione. Scrivete nei commetni la vostra soluzione!

Ecco dunque una possibile implementazione della funzione per creare le stelle, createStars():

 const canvas = document.getElementById("myCanvas");
 const ctx = canvas.getContext("2d");

 // Funzione per generare un numero casuale all'interno di un intervallo
 function randomInRange(min, max) {
      return Math.random() * (max - min) + min;
 }

 //Funzione per creare le stelle
 function createStars(numStars, speed, maxSize) {
    const stars = [];

    for (let i = 0; i < numStars; i++) {
        stars.push({
        x: randomInRange(0, canvas.width),
        y: randomInRange(0, canvas.height),
        size: randomInRange(1, maxSize),
        speed: randomInRange(speed / 2, speed),
        opacity: randomInRange(0.1, 1),
        });
      }

    return stars;
}

const stars = createStars(200, 10, 5);

Ecco la funzione per disegnare le stelle:

// Funzione per disegnare le stelle
function drawStars() {
  for (let i = 0; i < stars.length; i++) {
      const star = stars[i];
      ctx.beginPath();
      ctx.fillStyle = `rgba(255, 255, 255, ${star.opacity})`;
      ctx.arc(star.x, star.y, star.size, 0, Math.PI * 2);
      ctx.fill();
      }
 }

Ecco la funzione per far muovere le stelle:

      // Funzione per muovere le stelle
      function moveStars() {
        for (let i = 0; i < stars.length; i++) {
          const star = stars[i];
          star.x += star.speed;
          if (star.x > canvas.width) {
            star.x = 0;
          }
        }
      }

La funzione per disegnare lo sfonfo:

 // Funzione per disegnare lo sfondo
      function drawSky() {
        const gradient = ctx.createLinearGradient(0, 0, 0, canvas.height);
        gradient.addColorStop(0, "#001f3f");
        gradient.addColorStop(0.5, "#7FDBFF");
        gradient.addColorStop(1, "#FF4136");
        ctx.fillStyle = gradient;
        ctx.fillRect(0, 0, canvas.width, canvas.height);
      }

La funzione per animare lo sfondo:

      // Funzione per animare lo sfondo
      function animate() {
        requestAnimationFrame(animate);
        drawSky();
        moveStars();
        drawStars();
      }

      animate();

Nel css inseriamo:

body {
  margin: 0;
  padding: 0;
  overflow: hidden;
}

#myCanvas {
  display: block;
  margin: 0 auto;
  border: 1px solid #ccc;
}

Nel codice html inseriamo:

<canvas id="myCanvas" width="800" height="600"></canvas>