offscreen-element-modified-before-coming-onscreen.html (2047B)
1 <!DOCTYPE html> 2 <html class=reftest-wait> 3 <title>View transitions: new element is modified while offscren and brought onscreen using pseudo</title> 4 <link rel="help" href="https://drafts.csswg.org/css-view-transitions-1/"> 5 <link rel="author" href="mailto:khushalsagar@chromium.org"> 6 <link rel="match" href="offscreen-element-modified-before-coming-onscreen-ref.html"> 7 8 <script src="/common/reftest-wait.js"></script> 9 <style> 10 #target { 11 width: 100px; 12 height: 100px; 13 view-transition-name: target; 14 position: fixed; 15 background: green; 16 left: 0; 17 top: 200vh; 18 } 19 20 .hidden { 21 width: 10px; 22 height: 10px; 23 background: grey; 24 view-transition-name: hidden; 25 } 26 27 .onscreen::view-transition-group(target) { 28 transform: unset; 29 position: fixed; 30 top: 0; 31 left: 0; 32 animation: unset; 33 } 34 35 html::view-transition-group(hidden) { animation-duration: 300s; } 36 html::view-transition-image-pair(hidden) { animation: unset; opacity: 0; } 37 38 html::view-transition-old(target) { animation: unset; opacity: 0; } 39 html::view-transition-new(target) { animation: unset; opacity: 1; } 40 41 </style> 42 43 <div id=target class=target> 44 <div id=hidden class=hidden></div> 45 46 <script> 47 failIfNot(document.startViewTransition, "Missing document.startViewTransition"); 48 49 function bringOnscreenAndScreenshot() { 50 document.documentElement.classList.add("onscreen"); 51 52 requestAnimationFrame(() => requestAnimationFrame(() => 53 requestAnimationFrame(() => requestAnimationFrame(takeScreenshot)) 54 )); 55 } 56 57 async function runTest() { 58 // Start the transition while the element is offscreen. 59 let transition = document.startViewTransition(); 60 await transition.ready; 61 62 // Change the element's color while its still offscreen. 63 target.style.background = "blue"; 64 65 // Bring the element onscreen and ensure the color change is presented. 66 requestAnimationFrame(() => requestAnimationFrame(() => 67 requestAnimationFrame(() => requestAnimationFrame( 68 bringOnscreenAndScreenshot)) 69 )); 70 } 71 onload = () => requestAnimationFrame(() => requestAnimationFrame(runTest)); 72 </script>