| <!doctype html> |
| <meta charset=utf-8> |
| <title>CSSAnimation.startTime</title> |
| <!-- TODO: Add a more specific link for this once it is specified. --> |
| <link rel="help" href="https://drafts.csswg.org/css-animations-2/#cssanimation"> |
| <script src="/resources/testharness.js"></script> |
| <script src="/resources/testharnessreport.js"></script> |
| <script src="support/testcommon.js"></script> |
| <style> |
| |
| .animated-div { |
| margin-left: 10px; |
| /* Make it easier to calculate expected values: */ |
| animation-timing-function: linear ! important; |
| } |
| |
| @keyframes anim { |
| from { margin-left: 100px; } |
| to { margin-left: 200px; } |
| } |
| |
| </style> |
| <div id="log"></div> |
| <script type="text/javascript"> |
| |
| 'use strict'; |
| |
| test(t => { |
| const div = addDiv(t, { 'class': 'animated-div' }); |
| div.style.animation = 'anim 100s 100s'; |
| const animation = div.getAnimations()[0]; |
| |
| const timelineTime = animation.timeline.currentTime; |
| animation.startTime = timelineTime; |
| |
| assert_times_equal(animation.startTime, timelineTime, |
| 'Check setting of startTime actually works'); |
| }, 'The start time of a CSS animation can be set'); |
| |
| promise_test(async t => { |
| const div = addDiv(t, { 'class': 'animated-div' }); |
| div.style.animation = 'anim 100s 100s'; |
| const animation = div.getAnimations()[0]; |
| |
| // Seek to the half-way point |
| animation.startTime = animation.timeline.currentTime - 150 * MS_PER_SEC; |
| |
| assert_equals(getComputedStyle(div).marginLeft, '150px'); |
| }, 'The start time can be set to seek a CSS animation'); |
| |
| promise_test(async t => { |
| const div = addDiv(t, { class: 'animated-div' }); |
| const eventWatcher = new EventWatcher(t, div, [ |
| 'animationstart', |
| 'animationend', |
| ]); |
| div.style.animation = 'anim 100s 100s'; |
| const animation = div.getAnimations()[0]; |
| |
| await animation.ready; |
| |
| animation.startTime = animation.timeline.currentTime - 100 * MS_PER_SEC; |
| await eventWatcher.wait_for('animationstart'); |
| |
| animation.startTime = animation.timeline.currentTime - 200 * MS_PER_SEC; |
| await eventWatcher.wait_for('animationend'); |
| }, 'Seeking a CSS animation using the start time dispatches animation events'); |
| |
| </script> |