dynamic-stylesheet-animations.html (3549B)
1 <!DOCTYPE html> 2 <html> 3 <title>View transitions: Dynamic stylesheet sets correct animations</title> 4 <link rel="author" title="Tim Nguyen" href="https://github.com/nt1m"> 5 <link rel="help" href="https://drafts.csswg.org/css-view-transitions/#setup-transition-pseudo-elements-algorithm"> 6 7 <style> 8 :root { view-transition-name: none; } 9 #target { 10 view-transition-name: target; 11 background: red; 12 width: 100px; 13 height: 100px; 14 } 15 html::view-transition-group(*) { 16 animation-timing-function: steps(2, start); 17 animation-play-state: paused; 18 } 19 html::view-transition-old(*), 20 html::view-transition-new(*) { 21 animation-play-state: paused; 22 } 23 </style> 24 25 <div id="target"></div> 26 27 <script src="/resources/testharness.js"></script> 28 <script src="/resources/testharnessreport.js"></script> 29 <script> 30 promise_test(async () => { 31 let vt = document.startViewTransition(() => { 32 target.style.backgroundColor = "green"; 33 }); 34 35 await vt.ready; 36 37 assert_equals( 38 getComputedStyle(document.documentElement, "::view-transition-group(target)").animationName, 39 "-ua-view-transition-group-anim-target", 40 "Animation on group when there are 2 snapshots" 41 ); 42 43 assert_equals( 44 getComputedStyle(document.documentElement, "::view-transition-old(target)").animationName, 45 "-ua-view-transition-fade-out, -ua-mix-blend-mode-plus-lighter", 46 "Two animations when there are 2 snapshots" 47 ); 48 49 assert_equals( 50 getComputedStyle(document.documentElement, "::view-transition-new(target)").animationName, 51 "-ua-view-transition-fade-in, -ua-mix-blend-mode-plus-lighter", 52 "Two animations when there are 2 snapshots" 53 ); 54 await vt.skipTransition(); 55 }, "Both old and new snapshots"); 56 57 promise_test(async () => { 58 let vt = await document.startViewTransition(() => { 59 target.remove(); 60 }); 61 62 await vt.ready; 63 64 assert_equals( 65 getComputedStyle(document.documentElement, "::view-transition-group(target)").animationName, 66 "none", 67 "No animation on group when one snapshot is missing" 68 ); 69 70 assert_equals( 71 getComputedStyle(document.documentElement, "::view-transition-old(target)").animationName, 72 "-ua-view-transition-fade-out", 73 "Only one animation for old snapshot when new snapshot is missing" 74 ); 75 76 assert_equals( 77 getComputedStyle(document.documentElement, "::view-transition-new(target)").animationName, 78 "none", 79 "No animation since the snapshot is not generated" 80 ); 81 82 await vt.skipTransition(); 83 }, "Only old snapshot"); 84 85 promise_test(async () => { 86 let vt = await document.startViewTransition(() => { 87 const div = document.createElement("div"); 88 div.id = "target"; 89 document.body.append(div); 90 }); 91 92 await vt.ready; 93 94 assert_equals( 95 getComputedStyle(document.documentElement, "::view-transition-group(target)").animationName, 96 "none", 97 "No animation on group when one snapshot is missing" 98 ); 99 100 assert_equals( 101 getComputedStyle(document.documentElement, "::view-transition-old(target)").animationName, 102 "none", 103 "No animation since the snapshot is not generated" 104 ); 105 106 assert_equals( 107 getComputedStyle(document.documentElement, "::view-transition-new(target)").animationName, 108 "-ua-view-transition-fade-in", 109 "Only one animation for new snapshot when old snapshot is missing" 110 ); 111 await vt.skipTransition(); 112 }, "Only new snapshot"); 113 </script> 114 115 </body> 116 </html>