Bubble tutorial steps
Thème :
Junior
1 vues ·4/5 leçons

Étape 4 : JS - La Fabrique de Bulles

Nous allons créer un script qui génère des bulles en boucle, avec des tailles et des positions aléatoires.

1. Fonction de création de bulle

Ouvrez script.js.

const bubbleContainer = document.getElementById('bubble-container');

function createBubble() {
    // 1. Création de l'élément HTML
    const bubble = document.createElement('span');
    bubble.classList.add('bubble');

    // 2. Taille aléatoire (entre 20px et 80px)
    const size = Math.random() * 60 + 20 + 'px';
    bubble.style.width = size;
    bubble.style.height = size;

    // 3. Position horizontale aléatoire (0% à 100% de la largeur)
    bubble.style.left = Math.random() * 100 + '%';

    // 4. Durée d'animation aléatoire (pour que certaines aillent plus vite)
    // Entre 4s et 12s
    bubble.style.animationDuration = Math.random() * 8 + 4 + 's';

    // 5. Ajout au conteneur
    bubbleContainer.appendChild(bubble);

    // 6. Nettoyage !
    // Très important : quand l'animation est finie (après max 12s), on supprime l'élément
    // Sinon le navigateur va ramer au bout de 5 minutes avec 10000 bulles cachées en haut.
    setTimeout(() => {
        bubble.remove();
    }, 12000); // 12000ms = 12s (durée max)
}

2. Génération automatique

Pour avoir un flux constant, on utilise setInterval.

// Crée une bulle toutes les 300 millisecondes
setInterval(createBubble, 300);

Si vous voulez plus de bulles, baissez le chiffre (ex: 100). Moins de bulles ? Augmentez (ex: 1000).

3. Bonus : Créer au clic

On a promis dans le HTML qu’on pouvait cliquer pour créer des bulles.

document.addEventListener('click', (e) => {
    // On crée 5 bulles d'un coup
    for (let i = 0; i < 5; i++) {
        createBubbleAt(e.clientX, e.clientY);
    }
});

// Une variante de notre fonction qui accepte une position précise
function createBubbleAt(x, y) {
    const bubble = document.createElement('span');
    bubble.classList.add('bubble');

    // Taille un peu plus petite pour le clic
    const size = Math.random() * 40 + 10 + 'px';
    bubble.style.width = size;
    bubble.style.height = size;

    // Position exacte de la souris
    bubble.style.left = x + 'px';
    bubble.style.top = y + 'px'; // On défini le TOP car on ne part pas du bas

    // On écrase l'animation par défaut pour qu'elle parte de là où on est
    bubble.style.animation = 'floatUp 4s forwards ease-out';

    bubbleContainer.appendChild(bubble);

    setTimeout(() => {
        bubble.remove();
    }, 4000);
}

Il faut ajouter cette nouvelle animation floatUp dans le CSS (ou juste modifier le JS pour qu’il soit compatible, mais le plus simple est de laisser le setInterval gérer le fond et le clic gérer des explosions de bulles).

Pour faire simple dans ce tutoriel, contentons-nous de la version automatique setInterval(createBubble, 300); qui est déjà très jolie.

Ajoutez juste ceci pour que le clic lance aussi la fonction de base (même si la bulle partira du bas) :

document.addEventListener('click', () => {
    createBubble();
    createBubble();
    createBubble();
});

Résultat

Ouvrez index.html. Vous devriez voir un fond calme et des bulles qui montent sans fin. C’est relaxant et le code est très léger !

Prêt à passer à la suite ?

Vous avez terminé cette leçon sur Étape 4 : JS - La Fabrique de Bulles. Continuez votre apprentissage avec la prochaine leçon ou explorez d'autres formations.