每隔一段时间,Chrome 就会错误地或根本不渲染完全有效的 HTML/CSS。通过 DOM 检查器深入挖掘通常足以让它意识到其方式的错误并正确重绘,因此可以证明标记是好的情况。在我正在处理的项目中,这种情况经常(并且可以预见)发生,我已经将代码放置到位以在某些情况下强制重绘。
这适用于大多数浏览器/操作系统组合:
el.style.cssText += ';-webkit-transform:rotateZ(0deg)'
el.offsetHeight
el.style.cssText += ';-webkit-transform:none'
例如,调整一些未使用的 CSS 属性,然后询问一些强制重绘的信息,然后取消调整该属性。不幸的是,Mac 版 Chrome 背后的聪明团队似乎找到了一种无需重绘即可获得 offsetHeight 的方法。从而杀死一个有用的黑客。
到目前为止,我想出的在 Chrome/Mac 上获得相同效果的最佳方法是这段丑陋的内容:
$(el).css("border", "solid 1px transparent");
setTimeout(function()
{
$(el).css("border", "solid 0px transparent");
}, 1000);
就像,实际上强制元素跳一点,然后冷却一秒钟,然后再跳回去。更糟糕的是,如果您将超时时间降低到 500 毫秒以下(到不那么明显的程度),它通常不会产生预期的效果,因为浏览器在返回到原始状态之前不会重新绘制。
有人愿意提供适用于 Chrome/Mac 的此重绘/刷新 hack(最好基于上面的第一个示例)的更好版本吗?