Correction des animations JavaScript dépendantes des médias pour les sites Web réactifs

Correction des animations JavaScript dépendantes des médias pour les sites Web réactifs
Correction des animations JavaScript dépendantes des médias pour les sites Web réactifs

Comprendre le problème des animations JavaScript conditionnelles

Il est souvent nécessaire d’incorporer des comportements distincts pour différents types d’appareils ou tailles d’écran lors de l’utilisation d’une conception Web réactive. Il peut être difficile d'utiliser JavaScript dans cette situation pour contrôler les animations basées sur des requêtes multimédias. Lorsque deux animations (une pour chaque appareil) ne fonctionnent pas simultanément comme prévu, il s'agit d'un problème courant.

Deux animations JavaScript sont utilisées dans ce scénario : une pour un « défilement de navigation » (adapté aux écrans plus grands) et une autre pour un « défilement cta » (appel à l'action) destiné aux appareils plus petits. La difficulté réside dans le fait de s'assurer que chaque animation se déroule séparément en fonction de la largeur de l'écran tout en évitant les collisions.

Lorsque deux animations sont définies dans des balises de script différentes et qu'une seule d'entre elles fonctionne correctement, un problème survient. S'ils sont mis en œuvre avec négligence, leur fusion sous une seule condition ou la combinaison de balises de script peuvent entraîner d'autres problèmes, en particulier lors de l'utilisation de requêtes multimédias telles que « window.matchMedia() ».

Cet article explique comment utiliser les conditions multimédias pour organiser votre JavaScript afin que chaque animation fonctionne comme prévu. Pour assurer des transitions transparentes entre les écrans mobiles et les écrans plus grands, l'accent sera fortement mis sur les instructions conditionnelles et les requêtes multimédias appropriées.

Commande Exemple d'utilisation
window.matchMedia() JavaScript utilise cette technique pour appliquer des requêtes multimédias. En fonction de la taille de l'écran, il détermine si le document répond à la requête multimédia CSS donnée et lance les opérations JavaScript pertinentes. Ce script facilite la distinction entre les animations destinées aux écrans plus grands et celles destinées aux mobiles.
addEventListener("change", callback) Cette commande surveille les modifications apportées à l'état de la requête multimédia. La fonction fournie en rappel est exécutée lorsque la largeur de l'écran dépasse un seuil prédéterminé (par exemple 450 pixels). Il permet une réponse dynamique sans nécessiter d’actualisation de page.
removeEventListener("scroll", callback) En éliminant la gestion inutile des événements sur une taille d'écran incorrecte, cette commande optimise la vitesse en supprimant l'écouteur d'événements de défilement lorsqu'il n'est plus nécessaire. Lorsqu'on alterne entre les demandes des médias, c'est impératif.
window.pageYOffset La quantité de pixels qui ont défilé de haut en bas dans le document est renvoyée par cet attribut. Il est utilisé pour détecter si l'utilisateur fait défiler vers le haut ou vers le bas et pour suivre la position de défilement.
element.style.top Cette commande ajuste la propriété CSS supérieure d'un élément, qui contrôle la position verticale de l'élément sur la page. Ici, il est utilisé pour déterminer où dans le défilement de l'utilisateur la barre de navigation doit être affichée ou masquée.
element.style.left Cette commande déplace les éléments horizontalement en ajustant la propriété CSS de gauche, tout comme le fait element.style.top. Sur les appareils mobiles, il est utilisé pour faire glisser le bouton d'appel à l'action de manière visible et invisible.
mediaQuery.matches Cette propriété vérifie si la requête multimédia et le document correspondent désormais. Pour garantir que l'animation appropriée est appliquée sur les appareils mobiles plutôt que sur les ordinateurs de bureau, il est essentiel d'exécuter les animations appropriées de manière conditionnelle en fonction de la largeur de l'écran.
prevScrollpos >prevScrollpos > currentScrollPos Pour déterminer la direction de défilement (vers le haut ou vers le bas), cette condition vérifie les emplacements de défilement des itérations précédentes et actuelles. Déterminer comment les éléments doivent réagir au défilement (par exemple, en révélant ou en masquant des boutons ou des barres de navigation) est crucial.
onscroll Un gestionnaire d'événements intégré qui est déclenché par le défilement par l'utilisateur. En comparant les positions de défilement précédentes et actuelles, il exécute les animations basées sur le défilement.

Gestion des animations JavaScript en fonction de la taille de l'écran

Les exemples précédents de scripts JavaScript ont été créés pour résoudre le problème de la présence de deux animations différentes : une pour les ordinateurs de bureau et une pour les appareils mobiles. S'assurer que chaque animation ne démarre que lorsqu'elle est nécessaire, en fonction de la largeur de l'écran de l'appareil, constitue le principal défi. Le fenêtre.matchMedia() Une technique est utilisée pour y parvenir, permettant au code d'identifier les instances dans lesquelles des conditions spécifiques de requête multimédia sont satisfaites. Les scripts garantissent que chaque animation fonctionne séparément en fonction de la taille de l'écran en utilisant des conditions différentes pour le bureau (largeur minimale : 450 px) et le mobile (largeur maximale : 450 px).

Un comportement de défilement d'écran plus grand pour la barre de navigation est géré dans le premier script. Selon le sens du défilement, le navigation la barre reste visible ou disparaît lorsque l'utilisateur fait défiler vers le haut ou vers le bas. En utilisant le précédentScrollpos et currentScrollPos variables, ceci est géré en comparant les positions de défilement précédentes et actuelles. Le défilement vers le haut fait réapparaître la barre de navigation en définissant sa position supérieure sur 0, et le défilement vers le bas la fait disparaître en la déplaçant hors de vue avec une valeur supérieure négative.

Le deuxième script concerne le bouton « appel à l'action » (CTA) sur les appareils mobiles. Toutes les tailles d'écran affichent le bouton CTA, mais il ne s'anime que lorsque la largeur de l'écran est inférieure à 450 pixels. Lorsque l'utilisateur fait défiler vers le haut, le bouton glisse depuis le côté gauche de l'écran ; lorsqu'ils font défiler vers le bas, le bouton disparaît de la vue. Avec la même logique de comparaison de position de défilement que la barre de navigation, ce comportement est comparable. Cependant, plutôt que de modifier la valeur supérieure, il modifie l'emplacement gauche du bouton, le faisant apparaître ou disparaître en fonction de la direction du défilement.

Les deux scripts sont censés fonctionner séparément l'un de l'autre. Ils sont cependant encapsulés dans des expressions conditionnelles qui vérifient la largeur de l'écran afin d'éviter les conflits. Avec mediaQuery.matches, les requêtes multimédias peuvent être utilisées directement en JavaScript, permettant aux scripts d'effectuer une transition dynamique entre les deux animations sans interférer l'une avec l'autre. En conservant les animations superflues dans les largeurs d'écran désignées, cette approche modulaire améliore l'efficacité et garantit un fonctionnement transparent sur les ordinateurs de bureau et les appareils mobiles.

Gestion des animations conditionnelles basées sur des requêtes multimédias avec JavaScript

Cette solution gère les animations conditionnelles en fonction de la largeur de l'écran en utilisant JavaScript en conjonction avec le fenêtre.matchMedia fonction.

var prevScrollpos = window.pageYOffset;
var mediaQueryNav = window.matchMedia("(min-width: 450px)");
var mediaQueryCta = window.matchMedia("(max-width: 450px)");

window.onscroll = function() { scrollFunction(); };

function scrollFunction() {
  var currentScrollPos = window.pageYOffset;
  if (mediaQueryNav.matches) {
    // Navigation scroll for larger screens
    if (prevScrollpos > currentScrollPos) {
      document.getElementById("navigation").style.top = "0";
    } else {
      document.getElementById("navigation").style.top = "-90px";
    }
  }
  if (mediaQueryCta.matches) {
    // CTA scroll for mobile screens
    if (prevScrollpos > currentScrollPos) {
      document.getElementById("header-button").style.left = "0.25in";
    } else {
      document.getElementById("header-button").style.left = "-10in";
    }
  }
  prevScrollpos = currentScrollPos;
}

Approche modulaire utilisant des écouteurs d'événements séparés pour différentes tailles d'écran

Cette version est plus efficace et modulaire car elle utilise différents écouteurs d'événements de défilement pour chaque requête multimédia.

var prevScrollpos = window.pageYOffset;
var mediaQueryNav = window.matchMedia("(min-width: 450px)");
var mediaQueryCta = window.matchMedia("(max-width: 450px)");

mediaQueryNav.addEventListener("change", handleNavScroll);
mediaQueryCta.addEventListener("change", handleCtaScroll);

function handleNavScroll(e) {
  if (e.matches) {
    window.addEventListener("scroll", navScrollFunction);
  } else {
    window.removeEventListener("scroll", navScrollFunction);
  }
}

function handleCtaScroll(e) {
  if (e.matches) {
    window.addEventListener("scroll", ctaScrollFunction);
  } else {
    window.removeEventListener("scroll", ctaScrollFunction);
  }
}

function navScrollFunction() {
  var currentScrollPos = window.pageYOffset;
  if (prevScrollpos > currentScrollPos) {
    document.getElementById("navigation").style.top = "0";
  } else {
    document.getElementById("navigation").style.top = "-90px";
  }
  prevScrollpos = currentScrollPos;
}

function ctaScrollFunction() {
  var currentScrollPos = window.pageYOffset;
  if (prevScrollpos > currentScrollPos) {
    document.getElementById("header-button").style.left = "0.25in";
  } else {
    document.getElementById("header-button").style.left = "-10in";
  }
  prevScrollpos = currentScrollPos;
}

// Initial call to apply the correct event listeners
handleNavScroll(mediaQueryNav);
handleCtaScroll(mediaQueryCta);

Application d'une logique conditionnelle à un gestionnaire de défilement unifié pour les requêtes multimédias

Cette méthode utilise un seul écouteur d'événements de défilement avec des vérifications conditionnelles en fonction des requêtes multimédias pour gérer les deux animations.

var prevScrollpos = window.pageYOffset;
var mediaQuery = window.matchMedia("(max-width: 450px)");

window.onscroll = function() { scrollHandler(); };

function scrollHandler() {
  var currentScrollPos = window.pageYOffset;
  if (mediaQuery.matches) {
    // CTA scroll for mobile
    if (prevScrollpos > currentScrollPos) {
      document.getElementById("header-button").style.left = "0.25in";
    } else {
      document.getElementById("header-button").style.left = "-10in";
    }
  } else {
    // Navigation scroll for larger screens
    if (prevScrollpos > currentScrollPos) {
      document.getElementById("navigation").style.top = "0";
    } else {
      document.getElementById("navigation").style.top = "-90px";
    }
  }
  prevScrollpos = currentScrollPos;
}

Optimisation de JavaScript pour les animations réactives

Un élément crucial du développement de sites Web réactifs est de s’assurer que les transitions et les animations réagissent différemment sur des appareils de différentes tailles. Une gestion efficace des conditions est cruciale lorsque vous travaillez avec des requêtes multimédias et JavaScript, en particulier lorsque les animations sont destinées à être lancées uniquement sur des tailles d'écran particulières. C'est ici que les auditeurs d'événements dynamiques et fenêtre.matchMedia() entrer en jeu. Avec l'aide de ces outils, les développeurs peuvent s'assurer que les animations ne se lancent que lorsque certains critères sont remplis, améliorant ainsi l'expérience utilisateur et les performances sur les plates-formes de bureau et mobiles.

La gestion de nombreuses animations exécutées simultanément présente une autre difficulté pour les animations JavaScript qui dépendent du média. Diviser les fonctionnalités en écouteurs d'événements plus gérables et modulaires peut faire des merveilles dans cette situation. Il est plus efficace de séparer les différentes fonctionnalités et de les activer en fonction de requêtes multimédia particulières plutôt que d'exécuter tous les scripts en même temps. Cela garantit que chaque script fonctionne comme prévu sur l'appareil approprié et permet d'économiser une charge inutile du navigateur.

L'optimisation des performances pour les appareils mobiles est particulièrement cruciale lorsque vous travaillez avec des animations réactives. Étant donné que les appareils mobiles ont souvent une puissance de traitement inférieure à celle des ordinateurs de bureau, les performances des appareils mobiles peuvent être améliorées en réduisant la complexité des scripts. Cet exemple d'utilisation du défilement Le gestionnaire d'événements garantit efficacement le bon fonctionnement des animations spécifiques aux mobiles telles que le "cta scroll" sans solliciter les ressources de l'appareil. De plus, cela garantit que les appareils plus grands chargeront des animations proportionnelles uniquement à la taille de l’écran.

Foire aux questions sur les animations JavaScript et les requêtes multimédias

  1. Comment utiliser les requêtes multimédias en JavaScript ?
  2. JavaScript vous permet d'appliquer des requêtes multimédias avec window.matchMedia(). Vous pouvez utiliser cette méthode pour exécuter différents scripts en fonction de la largeur de l'écran.
  3. Comment contrôler les animations en fonction de la taille de l'écran ?
  4. Utiliser window.matchMedia() pour déterminer la largeur de l'écran afin de contrôler les animations. Ensuite, ajoutez ou supprimez des écouteurs d'événements si nécessaire. Cela garantit que, en fonction de la taille de l'écran, seule l'animation correspondante sera lue.
  5. Quelle est la meilleure façon d’optimiser les animations de défilement ?
  6. En réduisant le nombre d'opérations effectuées à l'intérieur de l'événement scroll, window.onscroll peut être utilisé plus efficacement dans l’optimisation de l’animation de défilement. Lorsqu'un défilement est détecté, la logique d'animation requise s'exécute alors seulement.
  7. Comment gérer plusieurs animations en JavaScript ?
  8. Plusieurs animations peuvent être gérées en les divisant en différentes conditions et écouteurs d'événements. Cela réduit les risques de conflits car chaque animation fonctionne séparément.
  9. Qu'est-ce que prevScrollpos et currentScrollPos faire dans une animation de défilement ?
  10. Ces variables surveillent l'endroit où l'utilisateur fait défiler. La position de défilement précédente est stockée dans prevScrollpos, et la position de défilement actuelle est stockée dans currentScrollPos. Il est possible de savoir si l'utilisateur fait défiler vers le haut ou vers le bas en les comparant.

Réflexions finales sur les animations basées sur des requêtes multimédias

En conclusion, la création d’un site web responsive nécessite la gestion des animations JavaScript pour différents appareils. Les développeurs peuvent offrir une expérience utilisateur optimale en déclenchant des animations spécifiques en fonction de la largeur de l'écran grâce à l'utilisation d'outils tels que fenêtre.matchMedia().

Lorsqu’ils sont correctement mis en œuvre, les sites Web peuvent améliorer leur comportement visuel et leurs performances sur divers appareils. Une façon d’y parvenir consiste à appliquer des animations de défilement de manière sélective et à les isoler. Cette méthode garantit des transitions transparentes entre les animations de bureau et mobiles et permet d'éviter les conflits de scripts.

Références pour les requêtes multimédias et les animations JavaScript
  1. Cet article s'inspire des meilleures pratiques en matière de conception Web réactive et d'utilisation de JavaScript trouvées sur Réseau de développeurs Mozilla (MDN) . MDN fournit une documentation détaillée sur la façon d'utiliser efficacement fenêtre.matchMedia() et d'autres techniques de requête multimédia en JavaScript.
  2. Des ressources supplémentaires sur l'optimisation des animations basées sur le défilement ont été recueillies auprès de Astuces CSS , offrant un aperçu de la façon dont animations de défilement fonctionne et peut être personnalisé pour différentes tailles d’écran.
  3. Les conseils et stratégies d'optimisation des performances pour la gestion de JavaScript sur différents appareils proviennent de Magazine fracassant , qui souligne l'importance des scripts modulaires pour les applications Web réactives.