partie 7

JavaScript

Introduction

Qu'est-ce que JavaScript ?

JavaScript est un langage de programmation qui permet d'ajouter des fonctionnalités interactives à des sites web. Conçu à l'origine pour le navigateur, il est désormais présent à peu près partout.

Un peu d'histoire

À savoir

Exemples

Charger son script

<body>
  <!-- Contenu de la page -->
  <script src="script.js"></script>
</body>

Variables et types de données

let name = "Alice"; // string
const age = 25; // number
var isStudent = true; // boolean

Opérations de base

let sum = 10 + 5; // 15
let isAdult = age > 18; // = true

if … else

if (keyCode === "SPACE") {
  console.log("space key hit");
} else if (keyCode === "ENTER") {
	console.log("enter key hit");
} else {
  console.log("any other key hit");
}

Fonctions

function greet (name) {
  console.log("Bonjour " + name);
}
greet("Alice"); // renvoie "Bonjour Alice"

Tableaux et objets

let fruits = ["pomme", "banane"];

fruits[0]; // "pomme"
fruits[1]; // "banane"

let person = { name: "Alice", age: 25 };

Boucles

for (let i = 0; i < fruits.length; i++) {
  console.log(fruits[i]);
}

fruits.forEach(function (element) {
	console.log(element);
});
// "pomme"
// "banane"

Interagir avec le DOM

→ DOM = Document Object Model (votre page HTML, en gros)

const title = document.querySelector("h1");
title.textContent = "Nouveau titre";

const container = document.querySelector(".container");
container.classList.add("active");
const projects = document.querySelectorAll(".is-project");
for (let i = 0; i < projects.length; i++) {
	console.log(projects[i]);
}

Événements

const button = document.querySelector(".btn");
button.addEventListener("click", function() {
  console.log("Bouton cliqué");
});

Fonctions anonymes et fonctions fléchées

fruits.forEach((fruit) => {
  console.log(fruit);
});

// vs.

function logFruit (fruit) {
	console.log(fruit);
}
fruits.forEach(logFruit);

Cas pratiques

Filtrer des éléments

<!DOCTYPE html>
<html lang="en">
<head>
  <meta charset="UTF-8">
  <meta name="viewport" content="width=device-width, initial-scale=1.0">
  <title>JavaScript</title>

  <link rel="stylesheet" href="style.css">
</head>
<body>
  <button class="filter-all">all</button>
  <button class="filter-typo">typography</button>
  <button class="filter-illu">illustration</button>

  <ul>
    <li class="is-project is-typography">project 1</li>
    <li class="is-project is-illustration">project 2</li>
    <li class="is-project is-illustration">project 3</li>
    <li class="is-project is-typography">project 4</li>
    <li class="is-project is-typography">project 5</li>
    <li class="is-project is-illustration">project 6</li>
  </ul>

  <script src="main.js"></script>
</body>
</html>
const allFilterBtn = document.querySelector(".filter-all");
allFilterBtn.addEventListener("click", function() {
  filterProjects("is-project");
});


const typoFilterBtn = document.querySelector(".filter-typo");
typoFilterBtn.addEventListener("click", function() {
  filterProjects("is-typography");
});

const illuFilterBtn = document.querySelector(".filter-illu");
illuFilterBtn.addEventListener("click", function() {
  filterProjects("is-illustration");
});

const projects = document.querySelectorAll(".is-project");

function filterProjects (filter) {
  console.log(filter);

  for (let i = 0; i < projects.length; i++) {
    if (projects[i].classList.contains(filter) === false) {
      projects[i].classList.add("hidden");
    } else {
      projects[i].classList.remove("hidden");
    }
  }
}
.hidden {
  display: none;
}

Type tester

<!DOCTYPE html>
<html lang="en">
<head>
  <meta charset="UTF-8">
  <meta name="viewport" content="width=device-width, initial-scale=1.0">
  <title>Type tester</title>

  <link rel="stylesheet" href="style.css">
</head>
<body>
  <label for="fontSizeControl">Taille de police : </label>
  <input type="range" id="fontSizeControl" min="6" max="92" value="16">

  <textarea id="textArea" style="font-size: 16px;">hello</textarea>

  <script src="type-tester.js"></script>
</body>
</html>
document.addEventListener('DOMContentLoaded', function() {
  const fontSizeControl = document.getElementById('fontSizeControl');
  const textArea = document.getElementById('textArea');

  fontSizeControl.addEventListener('input', function() {
      textArea.style.fontSize = fontSizeControl.value + 'px';
  });
});
body {
  font-family: Arial, sans-serif;
  margin: 20px;
}

textarea {
  width: 100%;
  height: 200px;
  margin-top: 10px;
}