Od czasu do czasu Chrome renderuje całkowicie poprawny kod HTML / CSS niepoprawnie lub wcale. Zagłębianie się w inspektora DOM często wystarcza, aby uświadomić sobie błąd na swoich drogach i poprawnie przerysować, więc możliwe jest, że znaczniki są dobre. Zdarza się to dość często (i przewidywalnie) w projekcie, nad którym pracuję, że wprowadziłem kod, aby wymusić przerysowanie w pewnych okolicznościach.
Działa to w większości kombinacji przeglądarki / systemu operacyjnego:
el.style.cssText += ';-webkit-transform:rotateZ(0deg)'
el.offsetHeight
el.style.cssText += ';-webkit-transform:none'
Jak na początku, popraw nieużywaną właściwość CSS, a następnie poproś o informacje, które wymuszają przerysowanie, a następnie popraw właściwość. Niestety, świetny zespół, który stoi za Chrome na Maca, wydaje się znaleźć sposób na uzyskanie offsetuHeight bez przerysowywania. W ten sposób zabicie innego użytecznego hacka.
Do tej pory najlepsze, co wymyśliłem, aby uzyskać ten sam efekt w Chrome / Mac, to brzydota:
$(el).css("border", "solid 1px transparent");
setTimeout(function()
{
$(el).css("border", "solid 0px transparent");
}, 1000);
Jak w rzeczywistości, faktycznie zmuś element do skoku, a następnie zrelaksuj się przez chwilę i przeskocz z powrotem. Co gorsza, jeśli upuścisz ten limit poniżej 500 ms (do poziomu, który byłby mniej zauważalny), często nie będzie miał pożądanego efektu, ponieważ przeglądarka nie przejdzie do przerysowywania, zanim powróci do pierwotnego stanu.
Czy ktoś chce zaoferować lepszą wersję tego przerysowania / odświeżenia (najlepiej w oparciu o pierwszy przykład powyżej), która działa na Chrome / Mac?