Heim > Web-Frontend > js-Tutorial > Wie erzwinge ich eine DOM-Neuzeichnung in Chrome unter macOS?

Wie erzwinge ich eine DOM-Neuzeichnung in Chrome unter macOS?

Linda Hamilton
Freigeben: 2024-12-21 09:56:15
Original
804 Leute haben es durchsucht

How to Force a DOM Redraw in Chrome on macOS?

DOM-Neuzeichnung auf Chrome/Mac erzwingen

Dieses Problem tritt auf, wenn Chrome auf Mac-Geräten gültige HTML-/CSS-Elemente falsch rendert. Während die Überprüfung des DOM häufig eine korrekte Neuzeichnung auslöst, schlägt dieser Hack auf Chrome/Mac aufgrund von Optimierungen fehl, die verhindern, dass offsetHeight eine Neuzeichnung auslöst.

Der folgende Hack ist eine Problemumgehung:

$(el).css("border", "solid 1px transparent");
setTimeout(function() {
  $(el).css("border", "solid 0px transparent");
}, 1000);
Nach dem Login kopieren

Dadurch wird das Element zu einem leichten Sprung gezwungen, der ein Neuzeichnen auslöst. Die Verzögerung ist jedoch spürbar.

Eine Alternative besteht darin, stattdessen diese Methode zu verwenden:

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

// in plain js
document.getElementById('parentOfElementToBeRedrawn').style.display = 'none';
document.getElementById('parentOfElementToBeRedrawn').style.display = 'block';
Nach dem Login kopieren

Dadurch wird das übergeordnete Element ausgeblendet und dann angezeigt, wodurch ein Neuzeichnen erzwungen wird.

Wenn diese Methode fehlschlägt, garantiert die folgende Funktion ein Neuzeichnen, indem sie einen leeren Textknoten in das Element einfügt:

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
}
Nach dem Login kopieren

Diese Technik erzwingt im Wesentlichen a Reflow, Aktualisierung des Layouts und Auslösen eines Neuzeichnens.

Das obige ist der detaillierte Inhalt vonWie erzwinge ich eine DOM-Neuzeichnung in Chrome unter macOS?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Quelle:php.cn
Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Neueste Artikel des Autors
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage