Maison > interface Web > tutoriel CSS > Comment forcer une actualisation du DOM dans Chrome sur Mac ?

Comment forcer une actualisation du DOM dans Chrome sur Mac ?

Barbara Streisand
Libérer: 2024-12-31 09:02:14
original
950 Les gens l'ont consulté

How to Force a DOM Refresh in Chrome on Mac?

Forcer l'actualisation du DOM sur Chrome pour Mac

Malgré un code HTML et CSS valide, Chrome sur Mac ne parvient parfois pas à restituer correctement les éléments ou néglige le rendu eux entièrement. Bien que l'inspection du DOM via l'inspecteur résolve souvent le problème, il existe des cas où Chrome évite intentionnellement de redessiner.

Le hack de redessin/actualisation courant qui fonctionne pour d'autres combinaisons navigateur-OS implique de modifier une propriété CSS inutilisée, en récupérant certaines informations pour déclencher un redessinage, puis annuler la modification de propriété.

Cependant, cette méthode échoue dans Chrome pour Mac. Une solution plus complexe a dû être employée :

$(el).css("border", "solid 1px transparent");
setTimeout(function() {
  $(el).css("border", "solid 0px transparent");
}, 1000);
Copier après la connexion

Cette méthode fait visiblement sauter l'élément, ce qui force un redessin. Cependant, réduire le délai d'attente en dessous de 500 ms peut entraîner un redessin du navigateur avant que l'élément ne revienne à son état d'origine, annulant ainsi l'effet.

Méthodes de redessinage alternatives

Une autre actualisation simple La méthode qui peut suffire est de masquer puis d'afficher immédiatement le conteneur parent de l'élément qui a besoin redessiner.

// jQuery
$('#parentOfElementToBeRedrawn').hide().show(0);

// Plain JavaScript
document.getElementById('parentOfElementToBeRedrawn').style.display = 'none';
document.getElementById('parentOfElementToBeRedrawn').style.display = 'block';
Copier après la connexion

Pour un redessinage plus approfondi, un nœud de texte vide peut être inséré et supprimé de l'élément :

var forceRedraw = function(element){

  if (!element) { return; }

  var n = document.createTextNode(' ');
  var disp = element.style.display;  // don't worry about previous display style

  element.appendChild(n);
  element.style.display = 'none';

  setTimeout(function(){
      element.style.display = disp;
      n.parentNode.removeChild(n);
  },20); // you can play with this timeout to make it as short as possible
}
Copier après la connexion

Cela force une redistribution, comme décrit par Paul Irish : http://paulirish.com/2011/dom-html5-css3-performance/

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!

source:php.cn
Déclaration de ce site Web
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
Derniers articles par auteur
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal