| OLD | NEW |
| (Empty) |
| 1 <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" | |
| 2 "http://www.w3.org/TR/html4/loose.dtd"> | |
| 3 | |
| 4 <html lang="en"> | |
| 5 <head> | |
| 6 <meta http-equiv="Content-Type" content="text/html; charset=utf-8"> | |
| 7 <title>Test simple animation with fill modes</title> | |
| 8 <style type="text/css" media="screen"> | |
| 9 .box { | |
| 10 position: relative; | |
| 11 left: 100px; | |
| 12 top: 10px; | |
| 13 height: 30px; | |
| 14 width: 200px; | |
| 15 animation-delay: 0.1s; | |
| 16 animation-duration: 0.1s; | |
| 17 animation-timing-function: linear; | |
| 18 } | |
| 19 | |
| 20 .running .two-keyframes { | |
| 21 animation-name: anim1; | |
| 22 } | |
| 23 | |
| 24 .running .three-keyframes { | |
| 25 animation-name: anim2; | |
| 26 } | |
| 27 | |
| 28 @keyframes anim1 { | |
| 29 from { left: 200px; } | |
| 30 to { left: 300px; } | |
| 31 } | |
| 32 @keyframes anim2 { | |
| 33 from { left: 200px; } | |
| 34 50% { left: 250px; } | |
| 35 to { left: 300px; } | |
| 36 } | |
| 37 | |
| 38 #a, #f { | |
| 39 background-color: blue; | |
| 40 animation-fill-mode: none; | |
| 41 } | |
| 42 #b, #g { | |
| 43 background-color: red; | |
| 44 animation-fill-mode: backwards; | |
| 45 } | |
| 46 #c, #h { | |
| 47 background-color: green; | |
| 48 animation-fill-mode: forwards; | |
| 49 } | |
| 50 #d, #i { | |
| 51 background-color: yellow; | |
| 52 animation-fill-mode: both; | |
| 53 } | |
| 54 #e, #j { | |
| 55 background-color: #999; | |
| 56 animation-fill-mode: both; | |
| 57 animation-iteration-count: 2; | |
| 58 animation-direction: alternate; | |
| 59 } | |
| 60 </style> | |
| 61 <script type="text/javascript" charset="utf-8"> | |
| 62 const numAnims = 10; | |
| 63 var animsFinished = 0; | |
| 64 const allowance = 5; | |
| 65 const expectedValues = [ | |
| 66 {id: "a", start: 100, end: 100}, | |
| 67 {id: "b", start: 200, end: 100}, | |
| 68 {id: "c", start: 100, end: 300}, | |
| 69 {id: "d", start: 200, end: 300}, | |
| 70 {id: "e", start: 200, end: 200}, | |
| 71 {id: "f", start: 100, end: 100}, | |
| 72 {id: "g", start: 200, end: 100}, | |
| 73 {id: "h", start: 100, end: 300}, | |
| 74 {id: "i", start: 200, end: 300}, | |
| 75 {id: "j", start: 200, end: 200} | |
| 76 ]; | |
| 77 var result = ""; | |
| 78 | |
| 79 if (window.testRunner) { | |
| 80 testRunner.dumpAsText(); | |
| 81 testRunner.waitUntilDone(); | |
| 82 } | |
| 83 | |
| 84 function animationEnded(event) { | |
| 85 if (++animsFinished == numAnims) { | |
| 86 requestAnimationFrame(endTest); | |
| 87 } | |
| 88 }; | |
| 89 | |
| 90 function endTest() { | |
| 91 | |
| 92 for (var i=0; i < expectedValues.length; i++) { | |
| 93 var el = document.getElementById(expectedValues[i].id); | |
| 94 var expectedValue = expectedValues[i].end; | |
| 95 var realValue = parseFloat(window.getComputedStyle(el).left); | |
| 96 if (Math.abs(expectedValue - realValue) < allowance) { | |
| 97 result += "PASS"; | |
| 98 } else { | |
| 99 result += "FAIL"; | |
| 100 } | |
| 101 result += " - end of animation - id: " + expectedValues[i].id + " ex
pected: " + expectedValue + " actual: " + realValue + "<br>"; | |
| 102 } | |
| 103 document.getElementById('result').innerHTML = result; | |
| 104 | |
| 105 if (window.testRunner) | |
| 106 testRunner.notifyDone(); | |
| 107 } | |
| 108 | |
| 109 window.onload = function () { | |
| 110 document.addEventListener("animationend", animationEnded, false); | |
| 111 document.body.classList.add("running"); | |
| 112 for (var i=0; i < expectedValues.length; i++) { | |
| 113 var el = document.getElementById(expectedValues[i].id); | |
| 114 var expectedValue = expectedValues[i].start; | |
| 115 var realValue = parseFloat(window.getComputedStyle(el).left); | |
| 116 if (Math.abs(expectedValue - realValue) < allowance) { | |
| 117 result += "PASS"; | |
| 118 } else { | |
| 119 result += "FAIL"; | |
| 120 } | |
| 121 result += " - start of animation - id: " + expectedValues[i].id + "
expected: " + expectedValue + " actual: " + realValue + "<br>"; | |
| 122 } | |
| 123 }; | |
| 124 | |
| 125 </script> | |
| 126 </head> | |
| 127 <body> | |
| 128 This test performs an animation of the left property with four different | |
| 129 fill modes on two sets of objects. The first set has animations with | |
| 130 only from and to keyframes. The second set has animations with from, to and | |
| 131 a third keyframe at 50%. It animates over 0.1 second with a 0.1 second delay. | |
| 132 It takes snapshots at document load and the end of the animation. | |
| 133 | |
| 134 <div id="a" class="box two-keyframes"> | |
| 135 None - 2 keyframes | |
| 136 </div> | |
| 137 <div id="b" class="box two-keyframes"> | |
| 138 Backwards - 2 keyframes | |
| 139 </div> | |
| 140 <div id="c" class="box two-keyframes"> | |
| 141 Forwards - 2 keyframes | |
| 142 </div> | |
| 143 <div id="d" class="box two-keyframes"> | |
| 144 Both - 2 keyframes | |
| 145 </div> | |
| 146 <div id="e" class="box two-keyframes"> | |
| 147 Both iterating - 2 keyframes | |
| 148 </div> | |
| 149 | |
| 150 <div id="f" class="box three-keyframes"> | |
| 151 None - 3 keyframes | |
| 152 </div> | |
| 153 <div id="g" class="box three-keyframes"> | |
| 154 Backwards - 3 keyframes | |
| 155 </div> | |
| 156 <div id="h" class="box three-keyframes"> | |
| 157 Forwards - 3 keyframes | |
| 158 </div> | |
| 159 <div id="i" class="box three-keyframes"> | |
| 160 Both - 3 keyframes | |
| 161 </div> | |
| 162 <div id="j" class="box three-keyframes"> | |
| 163 Both iterating - 3 keyframes | |
| 164 </div> | |
| 165 | |
| 166 <div id="result"> | |
| 167 </div> | |
| 168 </body> | |
| 169 </html> | |
| OLD | NEW |