Petite exercice pour remplir « sans dépasser » de lettres au hasard un bloc html.
L’idée est de remplir chaque ligne de lettre en chasse fixe (monospace) et d’ajouter un retour à la ligne pour avoir un bloc plein.
Attention : ce code est pour le fun et n’est pas parfait (certains caractères ne passent pas et la preview du codepen ne marche pas).
Le code est aussi commenté dans CodePen.
/* Ajouter GSAP*/ var fill = document.querySelector('.fill'); // je cible la première div.fill var wl; // largeur d'une lettre var hl; // hauteur var w; // largeur de la fenêtre var h; // hauteur /* fonction de lettre random via gsap */ // https://greensock.com/docs/v3/GSAP/UtilityMethods/random var randomLetter = gsap.utils.random('-abcdeABCDEF+*,#_!:\.?/='.split(''),true); /* étape 1 : prendre les dimensions */ function ini(){ w = window.innerWidth; // largeur de la fenetre h = window.innerHeight; // hauteur fill.style.display = 'inline-block'; // par défaut display block prend toute la largeur; // inline-block prend juste la largeur du texte fill.innerHTML = '0123456789'; // j'ajoute 10 glyphs wl = fill.clientWidth/10; // je divise par 10 pour avoir la taille d'un glyph fill.innerHTML = '0<br>1<br>2<br>3<br>4<br>5<br>6<br>7<br>8<br>9'; // idem en hauteur hl = fill.clientHeight/10; // ok fill.style.display = 'block'; // je remets console.log(w,h,wl,hl) fill.innerHTML = ''; // je vide } ini(); // je lance la fonction ini /* étape 2 : on remplit un peu de math Si j'ai 13 px et des lettres de 4 px, je peux en mettre 3. 13/4 = 3,25, on supprime le reste après la virgule -> 3. Math.floor(3.25) = 3 */ function fillit(){ let maxX = Math.floor(w/wl); // nombre max en x let maxY = Math.floor(h/hl); // nombre max en y let innerhtml = ''; // variable temporaire qui contient le texte /* boucle dans une boucle */ for(let y=0;y<maxY;y++){ for(let x=0;x<maxX;x++){ innerhtml+=randomLetter(); // truc de gsap } innerhtml+='<br>'; // on passe à ligne } fill.innerHTML = innerhtml; // on remplit l'élement html avec innerhtml } fillit(); // je lance … /* bonus */ window.addEventListener('resize',function(){ ini(); fillit(); })
See the Pen remplir avec du texte by Benoît Wimart (@benoitwimart) on CodePen.