| <!DOCTYPE html> |
| <html> |
| <head> |
| <style> |
| @keyframes slide-right { |
| from { |
| transform: translateX(0); |
| } |
| |
| to { |
| transform: translateX(800px); |
| } |
| } |
| |
| body { |
| background-color: rgb(255, 255, 255); |
| } |
| |
| #animated-box { |
| position: absolute; |
| left: 0; |
| top: 0; |
| width: 200px; |
| height: 200px; |
| background: blue; |
| |
| animation: slide-right 15s linear; |
| } |
| |
| #container { |
| position: absolute; |
| left: 0; |
| top: 300px; |
| width: 800px; |
| height: 200px; |
| visibility: hidden; |
| } |
| </style> |
| </head> |
| |
| <body> |
| <div id="animated-box"></div> |
| <div id="container"></div> |
| |
| <script> |
| function CreateSubContainer() { |
| var subContainer = document.createElement('div'); |
| subContainer.className = 'sub-container'; |
| subContainer.style.width = '50%'; |
| subContainer.style.height = '50%'; |
| return subContainer; |
| } |
| // Build a complicated scene in order to force a layout that takes a long |
| // time. |
| var container = document.getElementById('container'); |
| for (var i = 0; i < 1000; ++i) { |
| var subContainer = CreateSubContainer(); |
| for (var j = 0; j < 20; ++j) { |
| var subSubContainer = CreateSubContainer(); |
| subSubContainer.innerHTML = '-'; |
| subContainer.appendChild(subSubContainer); |
| } |
| container.appendChild(subContainer); |
| } |
| |
| window.setTimeout(function() { |
| // Trigger a very long layout... |
| var container = document.getElementById('container'); |
| var animatedBox = document.getElementById('animated-box'); |
| container.style.width = '600px'; |
| animatedBox.style.background = 'green'; |
| |
| window.setTimeout(function() { |
| // Followed by a very quick layout. |
| var container = document.getElementById('container'); |
| var animatedBox = document.getElementById('animated-box'); |
| animatedBox.style.background = 'red'; |
| |
| // This really shouldn't be necessary, but Cobalt seems to want to |
| // re-compute all used sizes on the above tiny style update without |
| // this. |
| container.style.display = 'none'; |
| |
| window.setTimeout(function() { |
| animatedBox.style.background = 'blue'; |
| }, 100); |
| }, 100); |
| }, 3000); |
| </script> |
| </body> |