| <!DOCTYPE html> |
| <title>Test of animation-direction timing functions</title> |
| <script src="../../resources/testharness.js"></script> |
| <script src="../../resources/testharnessreport.js"></script> |
| <style> |
| .box { |
| animation-duration: 2s; |
| animation-iteration-count: 4; |
| animation-name: move1; |
| animation-timing-function: ease; /* ease is good for testing because it is not symmetric */ |
| background-color: blue; |
| color: white; |
| height: 50px; |
| left: 20px; |
| margin-bottom: 10px; |
| position: relative; |
| top: 10px; |
| width: 250px; |
| } |
| |
| .normal { |
| animation-direction: normal; |
| } |
| |
| .alternate { |
| animation-direction: alternate; |
| } |
| |
| .reverse { |
| animation-direction: reverse; |
| } |
| |
| .alternate-reverse { |
| animation-direction: alternate-reverse; |
| } |
| |
| @keyframes move1 { |
| from { left: 0px; } |
| to { left: 200px; } |
| } |
| </style> |
| <div id="box1" class="box normal">normal</div> |
| <div id="box2" class="box alternate">alternate</div> |
| <div id="box3" class="box reverse">reverse</div> |
| <div id="box4" class="box alternate-reverse">alternate-reverse</div> |
| <script> |
| 'use strict'; |
| |
| function computedLeft(element) { |
| return Number(getComputedStyle(element).left.slice(0, -2)); |
| } |
| |
| test(function() { |
| const epsilon = 0.002; |
| |
| // ease = cubicBezier(0.25, 0.1, 0.25, 1) |
| // ease(0.1) = 0.0947963055884654 ==> position = 18.9593 |
| // ease(0.9) = 0.9943164775463438 ==> position = 198.863 |
| |
| box1.style.animationDelay = '-0.2s'; |
| assert_approx_equals(computedLeft(box1), 18.9593, epsilon, 'early box1'); |
| |
| box2.style.animationDelay = '-0.2s'; |
| assert_approx_equals(computedLeft(box2), 18.9593, epsilon, 'early box2'); |
| |
| box3.style.animationDelay = '-0.2s'; |
| assert_approx_equals(computedLeft(box3), 198.863, epsilon, 'early box3'); |
| |
| box4.style.animationDelay = '-0.2s'; |
| assert_approx_equals(computedLeft(box4), 198.863, epsilon, 'early box4'); |
| |
| |
| box1.style.animationDelay = '-2.2s'; |
| assert_approx_equals(computedLeft(box1), 18.9593, epsilon, 'late box1'); |
| |
| box2.style.animationDelay = '-2.2s'; |
| assert_approx_equals(computedLeft(box2), 198.863, epsilon, 'late box2'); |
| |
| box3.style.animationDelay = '-2.2s'; |
| assert_approx_equals(computedLeft(box3), 198.863, epsilon, 'late box3'); |
| |
| box4.style.animationDelay = '-2.2s'; |
| assert_approx_equals(computedLeft(box4), 18.9593, epsilon, 'late box4'); |
| }, "animation-direction works with timing functions"); |
| </script> |