Home >Web Front-end >JS Tutorial >How to Force a DOM Redraw in Chrome on macOS?

How to Force a DOM Redraw in Chrome on macOS?

Linda Hamilton
Linda HamiltonOriginal
2024-12-21 09:56:15754browse

How to Force a DOM Redraw in Chrome on macOS?

Force DOM Redraw on Chrome/Mac

This issue arises when Chrome on Mac devices incorrectly renders valid HTML/CSS elements. While inspecting the DOM often triggers a correct redraw, this hack fails on Chrome/Mac due to optimizations that prevent offsetHeight from triggering a redraw.

The following hack is a workaround:

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

This forces the element to slightly jump, which triggers a redraw. However, the delay is noticeable.

An alternative is to use this method instead:

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

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

This hides and then shows the parent element, forcing a redraw.

If this method fails, the following function guarantees a redraw by inserting an empty text node into the element:

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
}

This technique essentially forces a reflow, updating the layout and triggering a redraw.

The above is the detailed content of How to Force a DOM Redraw in Chrome on macOS?. For more information, please follow other related articles on the PHP Chinese website!

Statement:
The content of this article is voluntarily contributed by netizens, and the copyright belongs to the original author. This site does not assume corresponding legal responsibility. If you find any content suspected of plagiarism or infringement, please contact admin@php.cn