看看這個JSBIN:http://jsbin.com/hufibisawa/1/edit?css,js,output使用寬度和轉變轉化導致閃爍
火了鍍鉻:
- 點擊測試按鈕
- 點擊test2的按鈕
- 你會看到綠色酒吧閃爍。我想這是因爲「translate3d」不會像「寬度」一樣計算像素。
將「左」和「寬」屬性一起使用時,它完美地工作,但它不是性能。原因是translate3d觸發硬件加速並使用子像素計算,從而提供非常流暢的動畫。
這是一個錯誤?它可以解決嗎?使用Firefox這個工作非常棒!所以也許是一個Chrome的錯誤?
CSS的
#test {
position: absolute;
transition: transform 1s ease-out, width 1s ease-out;
left: 0;
top: 0;
transform: translate3d(0, 0, 0);
width: 300px;
height: 25px;
background-color: red;
}
#test2 {
position: absolute;
transition: transform 1s ease-out, width 1s ease-out;
left: 0;
transform: translate3d(0, 25px, 0);
top: 0;
width: 300px;
height: 25px;
background-color: green;
}
而且JS
document.querySelector('#button').addEventListener('click', function() {
var el = document.querySelector('#test');
el.style.width = '150px';
el.style.transform = 'translate3d(0px, 0px, 0)';
var el = document.querySelector('#test2');
el.style.width = '150px';
el.style.transform = 'translate3d(150px, 0px, 0)';
});
document.querySelector('#button2').addEventListener('click', function() {
var el = document.querySelector('#test');
el.style.width = '300px';
el.style.transform = 'translate3d(0px, 0px, 0)';
var el = document.querySelector('#test2');
el.style.width = '300px';
el.style.transform = 'translate3d(0, 25px, 0)';
});
即使我用rom轉換刪除閃爍仍然存在。一個問題你是什麼意思,通過改變「寬度和左邊不是高性能的」? –
更新的評論解釋說:-) – christianalfoni
您使用的是哪種瀏覽器?由於「translate3d」正在使用您的瀏覽器引擎,並嘗試在瀏覽器之間切換以查看不同的行爲。 – Sato