Passer au contenu principal

Settings

Color Mode

Theme Skin

Background

Appearance preferences are saved in this browser only.

Environment

Current Environment Dev

Built with JEKYLL_ENV=development. Changes auto-reload under jekyll serve.

Theme & Build

Jekyll v3.10.0
Last BuildNov 03, 07:01

Page Location

Page Info

Layout default
Collection none
Path fr/docs/features/navigation-architecture.md
URL /fr/docs/features/navigation-architecture/
Cette page a été traduite automatiquement depuis l'original en anglais. Voir l'original

Architecture de navigation modulaire ES6

Le système de navigation de zer0-mistakes sous forme de modules ES6 — menus déroulants au survol, accessibilité au clavier, défilement fluide, persistance de la barre latérale et dégradation progressive.

Architecture de navigation modulaire ES6

Le JavaScript de navigation de zer0-mistakes est organisé sous forme de modules ES6 dans assets/js/modules/navigation/. Cette approche modulaire permet le tree-shaking, des tests unitaires indépendants et une extension facile sans toucher à des fichiers monolithiques.

La barre de navigation avec un menu déroulant ouvert au survol — l'un des comportements (menus déroulants, accès au clavier, défilement fluide, état de la barre latérale) fournis par les modules de navigation

Aperçu des modules

assets/js/modules/navigation/
├── index.js         — Entry point: imports and initializes all modules
├── config.js        — Shared constants (breakpoints, selectors, timing)
├── focus.js         — Focus trapping for offcanvas / modals
├── gestures.js      — Touch/swipe support for mobile nav
├── keyboard.js      — Arrow-key navigation, Escape handling
├── scroll-spy.js    — Active section highlighting in sidebars
├── sidebar-state.js — Persist collapsed/expanded state (localStorage)
└── smooth-scroll.js — Smooth scroll to anchor links

Le point d’entrée est importé par assets/js/navigation.js :

// assets/js/navigation.js
import { initNavigation } from './modules/navigation/index.js';

document.addEventListener('DOMContentLoaded', () => {
  initNavigation();
});

Fonctionnalités clés

Les menus déroulants de la barre de navigation sur ordinateur s’ouvrent au survol avec un court délai afin d’éviter les déclenchements accidentels. Le délai est une constante locale au module dans navbar.js ; le point de rupture lg qui conditionne le comportement au survol provient de config.breakpoints, que syncBreakpointsFromCss() actualise à l’exécution à partir des propriétés personnalisées --zer0-bp-*, afin que les tokens SCSS restent la source unique de vérité :

// assets/js/modules/navigation/navbar.js
const TOOLTIP_DELAY = { show: 400, hide: 100 };

// assets/js/modules/navigation/config.js
breakpoints: { sm: 576, md: 768, lg: 992, xl: 1200, xxl: 1400 }

keyboard.js gère :

Touche Action
Tab / Shift+Tab Déplacement standard du focus
Arrow Down / Arrow Up Déplacement entre les éléments du menu déroulant
Escape Fermer le menu déroulant / l’offcanvas
Enter / Space Activer l’élément ayant le focus

Persistance de l’état de la barre latérale

sidebar-state.js enregistre les sections de la barre latérale qui sont développées dans localStorage, afin que l’état survive aux rechargements de page :

// One key holds every expanded node: `state.storagePrefix` + `state.keys.expandedNodes`
localStorage.setItem('zer0-nav-expanded-nodes', JSON.stringify([...expandedNodeIds]));

Scroll Spy

scroll-spy.js met en surbrillance la section courante dans la table des matières au fur et à mesure que l’utilisateur défile. L’entrée active est le dernier titre dont le haut a franchi la ligne de lecture (scroll-padding-top sous le haut de la fenêtre), recalculée à chaque frame d’animation à partir des décalages de titres mis en cache. Voir Table des matières.

Dégradation progressive

Les API de navigateur optionnelles sont détectées par fonctionnalité, si bien qu’un module se dégrade au lieu de lever une erreur. Le scroll spy ne nécessite rien de plus que scrollY — il ne fait appel à ResizeObserver que pour remesurer les décalages de titres lorsque le contenu se réagence :

if (typeof ResizeObserver !== 'undefined') {
  this._resizeObserver = new ResizeObserver(this._onReflow);
  this._resizeObserver.observe(content);
}

La barre de navigation s’affiche et fonctionne comme un composant Bootstrap standard même lorsque JavaScript est désactivé ou échoue.

Include de navigation principal

_includes/navigation/navbar.html

L’include de la barre de navigation affiche la barre Bootstrap 5, remplit les liens à partir de _data/navigation.yml (ou du repli sur la collection dynamique) et produit les attributs de données ciblés par les modules JS.

Ajouter un module de navigation

  1. Créez assets/js/modules/navigation/my-feature.js :

    export function initMyFeature() {
      // implementation
    }
    
  2. Importez-le et appelez-le depuis index.js :

    import { initMyFeature } from './my-feature.js';
    
    export function initNavigation() {
      // … existing init calls …
      initMyFeature();
    }
    

Voir aussi

Voir aussi

  • [[Navigation]]
  • [[Keyboard Navigation]]
  • [[Features]]