Creative Coding

Introduction

2526 · CMIA · Dekens Antoine

Le cours

Uniquement du code ?

Non, mais presque

Objectifs & dynamique

Pour nos 5 prochaines rencontres, le but est de vous équiper techniquement afin que vous puissiez donner vie à vos idées pour le projet CMIA. Dans la première moitié nous commençerons en douceur avec des révisions, pour ensuite découvrir des techniques plus avancées qui mélangeront à la fois de l'HTML, du CSS et du Javascript.

Dans la seconde partie, la théorie laissera place à la pratique. Le cours se transformera en mini-ateliers de suivi de projet, où je serai à vos côtés pour vous épauler et vous guider dans vos propres expérimentations.

Mini-ateliers

En vue de préparer les mini-ateliers, voici un lien vers une google sheet qui servira à noter vos idées d'expérimentations que vous souhaiteriez implémenter dans votre projet. Pour chaque idée vous indiquez :

  • une explication brève mais précise
  • une ou plusieurs références qui l'illustrent (site, video, image, etc.)

Outils

  • Visual Studio Code
  • Codepen

Notre pote l'IA

C'est ok

  • aide à la résolution d'erreur
  • en vue d'approfondir une notion
  • génération de code sous condition de compréhension et vérification de la production IA

C'est non

  • vibe-coding
  • génération complète de code sans relecture, ni validation

CSS 101

Révisions

Sélecteurs simples

<section>
  <h1 id="mainTitle">Un titre</h1>
  <p class="text">Un paragraphe</p>
</section>
// Sélection par nom de balise
section{
  background: red;
}

// Sélection par nom de class
.text{
  font-size: 18px; 
}

// Sélection par id
#mainTitle{
  color: slateblue;
}

JS 101

Révisions

Afficher un message dans la console

const message = 'Que la puissance céleste soit avec vous';

// Demande d'afficher la valeur
// de notre variable 'message' dans la console.
console.log( message );
Pensez à l'utilisez régulièrement dans l'avancement de votre projet. Cela peut rapidement vous aidez à déceler des erreurs dans votre code.

Template literals

Les template literals permettent d'interpréter du javascript à l'intérieur d'une chaîne de caractère délimitée entre accents grave. Le javascript se trouvera entre des parenthèses précédées par le symbole $ :

const currentGame = "Wuchang: Fallen Feathers";

// La phrase est complétée avec la variable "currentGame";
const sentence = `En ce moment je joue à ${ currentGame }`;
console.log( sentence );

Récuperer un élément HTML

document.querySelector() retourne le premier élément du document qui correspond au sélecteur CSS spécifié entre parenthèse :

<span class="particle"></span>
// Récupère le premier élément dans le document
// qui contient 'particle' dans l'attribut 'class'
const particle = document.querySelector( '.particle' );

Modifier le style d'un élément

Une fois un élément récupéré en javascript, nous aurons accès à plusieurs propriétés, comme style qui permet de changer la valeur d'une propriété CSS.

Nous pouvons aussi récupérer une propriété si elle est présente dans l'attribut style de l'élément.
<span class="particle" style="background: yellow;"></span>
const particle = document.querySelector( '.particle' );

const textSize = 18;
// Modifie la propriété "fontSize" de notre texte 
// en utilisant les template literals pour ajouter
// la valeur numérique à l'unité "px";
particule.style.fontSize = `${textSize}px`;

// Retourne "yellow" dans la console
console.log( particule.style.background );

Récupérer la taille de l'écran

// Largeur totale de votre fenêtre
const screenWidth = window.innerWidth;

// Hauteur totale de votre fenêtre
const screenHeight = window.innerHeight;

Récupérer la taille d'un élément

<section class="wrapper"></section>
const wrapper = document.querySelector( '.wrapper' );

// Largeur totale de notre élément section.wrapper
const wrapperWidth = wrapper.clientWidth;

// Hauteur totale de notre élément section.wrapper
const wrapperHeight = wrapper.clientHeight;

Boucle simple

for( let i = 0; i < 3; i++ ) {
  console.log( i );
  // 0 pour la première itération
  // 1 pour la seconde
  // 2 pour la dernière
}

Manipulations des nombres

Révisions

Arrondir un nombre

const numberA = Math.round( 10.5 );   // 11
const numberB = Math.round( 10.732 ); // 11
const numberC = Math.round( 10.34 );  // 10

const numberD = Math.ceil( 10.5 );    // 11
const numberE = Math.ceil( 10.732 );  // 11
const numberF = Math.ceil( 10.34 );   // 11

const numberG = Math.floor( 10.5 );   // 10
const numberH = Math.floor( 10.732 ); // 10
const numberI = Math.floor( 10.34 );  // 10

Générer un nombre aléatoire

// Retourne un nombre décimal entre 0 et 0.99999…
const randomNumber1 = Math.random();

// Retourne un nombre décimal entre 0 et 9.99999…
const randomNumber2 = Math.random() * 10;

Nombre aléatoire++

const rand = ( max = 1, min = 0, round = false ) => {
  const n = Math.random() * ( max - min ) + min;
  return round ? Math.round( n ) : n;
};
  • max est le nombre maximum que vous voulez obtenir ( par défaut 1 )
  • min est le nombre minimum que vous voulez obtenir ( par défaut 0 )
  • round est un boolean, s'il est true, alors le nombre sera arrondi (par défaut false)
const rand = ( max = 1, min = 0, round = false ) => {…};

const numberA = rand( 7 ); // Un nombre décimal entre 0 et 6.999… 
const numberB = rand( 7, 2 ); // Un nombre décimal entre 2 et 6.999… 
const numberC = rand( 7, 2, true ); // Un nombre entier entre 2 et 7 

Normaliser un nombre

Cela consiste à ramener un nombre dans une plage comprise entre 0 et 1, basé sur une valeur maximale. L'intérêt est qu’ensuite, on peut réutiliser cette valeur normalisée dans n’importe quelle unité (pixels, pourcentages, etc.), sans dépendre de l'échelle de départ.

// Largeur d'un élément en px
const width = 450;

// La largeur maximale de l'écran
const maxWidth = 1600;

// En divisant notre valeur par sa valeur maximale, 
// le nombre normalisé sera compri entre 0 et 1.
const widthNormalize = 450 / 1600;

Exercices

Sur base du codepen suivant, modifiez uniquement le javascript pour :

  1. changer aléatoirement la taille de notre particule.
  2. changer aléatoirement la position de la particule sur base des dimensions de l'écran.
Propriétés CSS utilent: width, height, top, left

Les tableaux

Révisions

Syntaxe

Un tableau est une liste de données entre crochet séparées par des virgules. On accède à une donnée via son indice, qui commence toujours par 0 :

const pokedex = [ 'pikachu', 'onix', 'bulbizarre' ];

// Affiche dans la console 'onix'
console.log( pokedex[ 1 ] );

Longueur

La longueur d'un tableau est le nombre d'éléments qui le compose, accessible via la propriété length :

const pokedex = [ 'pikachu', 'onix', 'bulbizarre' ];

// Retourne la longueur de notre tableau
// de manière chiffrée (3)
const length = pokedex.length;

Récupérer un élément aléatoire d'un tableau

En multipliant la longueur par un nombre aléatoire entre 0 et 0.9999… en n'oubliant pas d'arrondir le résultat vers l'entier inférieur, nous pouvons utiliser le résultat comme indice et retouner un élément aléatoire du tableau. Voici la fonction :

const getRandomElement = ( array ) => {
  const randomIndex = Math.floor( Math.random() * array.length );
  return array[ randomIndex ];
}

Exercice

Sur base du codepen suivant, modifiez uniquement le javascript pour :

  1. changer aléatoirement le background de la particule depuis un tableau de couleurs.

1/6

1/1