recherche
Maisoninterface Webtutoriel CSS[Traductions] Implémentation d'animations avec Throttle en JavaScript

[Translations] Implementing Animations with Throttle in JavaScript

Lien de l'article original


Implémentation d'animations avec Throttle en JavaScript

Ce document explique comment améliorer les performances d'animation à l'aide de la limitation en JavaScript et applique la limitation pour résoudre le problème des animations de défilement saccadées. Il compare également les différences avant et après l'application de l'accélérateur.

Qu’est-ce que l’accélérateur ?

L'accélérateur est une technique qui limite l'appel d'une fonction « au plus une fois » dans un « certain intervalle de temps ». En d'autres termes, même si un événement se produit plusieurs fois sur une courte période, la fonction ne sera exécutée qu'une seule fois dans l'intervalle de temps défini par la manette. Par exemple, si une fonction a une limitation de 100 ms, même si l'événement se produit 10 fois en 1 seconde, la fonction sera exécutée au maximum 10 fois (à intervalles de 100 ms).

Où l’accélérateur est-il utilisé ?

L'accélérateur peut être utilisé dans les situations suivantes :

  • Prévenir la dégradation des performances due au déclenchement excessif d'événements : Lorsque des événements tels que le défilement, le mouvement de la souris et le redimensionnement de la fenêtre se produisent fréquemment sur une courte période, le gestionnaire d'événements peut être exécuté de manière excessive, entraînant des problèmes de performances. L'accélérateur est utilisé pour atténuer cela.
  • Rendre les animations plus fluides : Lorsqu'il est nécessaire d'exprimer des changements continus, tels que des animations de défilement, l'animation peut être saccadée ou saccadée en fonction de la fréquence de l'événement. L'utilisation de l'accélérateur peut rendre les animations plus fluides.

Problème : bégaiement et animations de défilement saccadées

Une tentative a été faite pour implémenter une animation de défilement fluide en fonction de l'événement de la molette de défilement, mais avant d'appliquer la limitation, l'animation était saccadée.

Raison : En effet, l'événement wheel se produit à un rythme très élevé, provoquant un appel excessif de la fonction window.scrollBy, empêchant le navigateur de traiter toutes les requêtes.

Comparaison

1. Coder avant d'appliquer l'accélérateur

useEffect(() => {
    const container = scrollContainerRef.current;
    if (!container) return;

    const handleWheel = (event) => {
        event.preventDefault();

        window.scrollBy({
            left: event.deltaY,
            behavior: 'smooth'
        });
    };

    container.addEventListener('wheel', handleWheel);

    return () => {
        container.removeEventListener('wheel', handleWheel);
    };
}, []);

Dans ce code, la fonction handleWheel est exécutée à chaque fois qu'un événement de roue se produit. Cette fonction calcule la quantité de défilement en utilisant la valeur deltaY de l'événement et défile en appelant la fonction window.scrollBy. Le problème est que l'événement wheel peut se produire plusieurs fois sur une très courte période, ce qui provoque un appel excessif de window.scrollBy, ce qui entraîne une animation saccadée.

2. Code après avoir appliqué l'accélérateur

useEffect(() => {
    const container = scrollContainerRef.current;
    if (!container) return;

    const handleWheel = (event) => {
        event.preventDefault();

        window.scrollBy({
            left: event.deltaY,
            behavior: 'smooth'
        });
    };

    container.addEventListener('wheel', handleWheel);

    return () => {
        container.removeEventListener('wheel', handleWheel);
    };
}, []);

Dans le code limité, la variable throttleTimer est utilisée pour gérer l'exécution de la fonction. Le processus fonctionne comme suit :

  • Lorsque la fonction handleWheel est appelée, elle vérifie si throttleTimer existe.
  • Si throttleTimer existe (ce qui signifie qu'une minuterie précédemment définie est toujours active), la fonction revient immédiatement. Cela empêche le traitement de nouvelles demandes de défilement alors qu'une animation de défilement est déjà en cours.
  • Si throttleTimer n'existe pas, event.preventDefault() est appelé pour empêcher le comportement de défilement par défaut, et setTimeout est utilisé pour exécuter la fonction window.scrollBy après 16 ms.
  • Dans la fonction de rappel setTimeout, throttleTimer est défini sur null, réinitialisant la manette des gaz et permettant à la fonction d'être rappelée après le délai.

3. Améliorations potentielles

  • Délai initial de setTimeout

    setTimeout est utilisé pour implémenter le mécanisme de limitation. setTimeout exécute la fonction de rappel après le délai spécifié (16 ms dans ce cas). Par conséquent, lorsque le premier événement de roue se produit, window.scrollBy est invoqué après un délai de 16 ms. Ce retard initial peut conduire à une perception de manque de réactivité immédiate, potentiellement interprétée comme un bégaiement, en particulier lors de mouvements rapides des roues. (D'autres améliorations seront explorées à l'avenir...)

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn
Ajout d'ombres de boîte aux blocs et éléments WordPressAjout d'ombres de boîte aux blocs et éléments WordPressMar 09, 2025 pm 12:53 PM

Le CSS Box-Shadow et les propriétés de contour ont gagné le thème. Laissez regarder quelques exemples de la façon dont cela fonctionne dans des thèmes réels et des options que nous devons appliquer ces styles aux blocs et éléments WordPress.

Créez un formulaire de contact JavaScript avec le cadre Smart FormsCréez un formulaire de contact JavaScript avec le cadre Smart FormsMar 07, 2025 am 11:33 AM

Ce tutoriel montre la création de formulaires JavaScript professionnels à l'aide du cadre Smart Forms (Remarque: non plus disponible). Bien que le cadre lui-même ne soit pas disponible, les principes et techniques restent pertinents pour d'autres constructeurs de formulaires.

Demystifier les lecteurs d'écran: formulaires accessibles et meilleures pratiquesDemystifier les lecteurs d'écran: formulaires accessibles et meilleures pratiquesMar 08, 2025 am 09:45 AM

Ceci est le 3ème article d'une petite série que nous avons faite sur l'accessibilité. Si vous avez manqué le deuxième article, consultez "Gestion de la mise au point des utilisateurs avec: Focus-visible". Dans

Créer un éditeur de texte en ligne avec l'attribut satisfaistableCréer un éditeur de texte en ligne avec l'attribut satisfaistableMar 02, 2025 am 09:03 AM

La construction d'un éditeur de texte en ligne n'est pas triviale. Le processus commence par rendre l'élément cible modifiable, gérer des exceptions potentielles de syntaxerror en cours de route. Créer votre éditeur Pour créer cet éditeur, vous devrez modifier dynamiquement le contenu

Faire votre première transition Svelte personnaliséeFaire votre première transition Svelte personnaliséeMar 15, 2025 am 11:08 AM

L'API de transition Svelte fournit un moyen d'animer les composants lorsqu'ils entrent ou quittent le document, y compris les transitions Svelte personnalisées.

Travailler avec GraphQL CachingTravailler avec GraphQL CachingMar 19, 2025 am 09:36 AM

Si vous avez récemment commencé à travailler avec GraphQL ou examiné ses avantages et ses inconvénients, vous avez sans aucun doute entendu des choses comme "GraphQL ne prend pas en charge la mise en cache" ou

Comparaison des 5 meilleurs constructeurs de formulaires PHP (et 3 scripts libres)Comparaison des 5 meilleurs constructeurs de formulaires PHP (et 3 scripts libres)Mar 04, 2025 am 10:22 AM

Cet article explore les meilleurs scripts de générateur de formulaires PHP disponibles sur le marché Envato, en comparant leurs fonctionnalités, leur flexibilité et leurs design. Avant de plonger dans des options spécifiques, comprenons ce qu'est un constructeur de formulaires PHP et pourquoi vous en utiliseriez un. Un formulaire PHP

Téléchargement de fichiers avec Multer dans Node.js et ExpressTéléchargement de fichiers avec Multer dans Node.js et ExpressMar 02, 2025 am 09:15 AM

Ce tutoriel vous guide dans la création d'un système de téléchargement de fichiers à l'aide de Node.js, Express et Multer. Nous couvrirons les téléchargements de fichiers uniques et multiples, et nous ferons même de la démonstration de stockage d'images dans une base de données MongoDB pour une récupération ultérieure. Tout d'abord, configurez votre projec

See all articles

Outils d'IA chauds

Undresser.AI Undress

Undresser.AI Undress

Application basée sur l'IA pour créer des photos de nu réalistes

AI Clothes Remover

AI Clothes Remover

Outil d'IA en ligne pour supprimer les vêtements des photos.

Undress AI Tool

Undress AI Tool

Images de déshabillage gratuites

Clothoff.io

Clothoff.io

Dissolvant de vêtements AI

AI Hentai Generator

AI Hentai Generator

Générez AI Hentai gratuitement.

Article chaud

R.E.P.O. Crystals d'énergie expliqués et ce qu'ils font (cristal jaune)
2 Il y a quelques semainesBy尊渡假赌尊渡假赌尊渡假赌
Repo: Comment relancer ses coéquipiers
4 Il y a quelques semainesBy尊渡假赌尊渡假赌尊渡假赌
Hello Kitty Island Adventure: Comment obtenir des graines géantes
3 Il y a quelques semainesBy尊渡假赌尊渡假赌尊渡假赌

Outils chauds

Dreamweaver CS6

Dreamweaver CS6

Outils de développement Web visuel

Envoyer Studio 13.0.1

Envoyer Studio 13.0.1

Puissant environnement de développement intégré PHP

Adaptateur de serveur SAP NetWeaver pour Eclipse

Adaptateur de serveur SAP NetWeaver pour Eclipse

Intégrez Eclipse au serveur d'applications SAP NetWeaver.

mPDF

mPDF

mPDF est une bibliothèque PHP qui peut générer des fichiers PDF à partir de HTML encodé en UTF-8. L'auteur original, Ian Back, a écrit mPDF pour générer des fichiers PDF « à la volée » depuis son site Web et gérer différentes langues. Il est plus lent et produit des fichiers plus volumineux lors de l'utilisation de polices Unicode que les scripts originaux comme HTML2FPDF, mais prend en charge les styles CSS, etc. et présente de nombreuses améliorations. Prend en charge presque toutes les langues, y compris RTL (arabe et hébreu) ​​et CJK (chinois, japonais et coréen). Prend en charge les éléments imbriqués au niveau du bloc (tels que P, DIV),

Télécharger la version Mac de l'éditeur Atom

Télécharger la version Mac de l'éditeur Atom

L'éditeur open source le plus populaire