59 lines
1.5 KiB
HTML
59 lines
1.5 KiB
HTML
<!DOCTYPE html>
|
|
<body>
|
|
<style>
|
|
body, #cover {
|
|
background-color: green;
|
|
}
|
|
|
|
#target, #cover {
|
|
position: absolute;
|
|
top: 0;
|
|
left: 0;
|
|
height: 100px;
|
|
}
|
|
|
|
#target {
|
|
width: 100px;
|
|
background-color: red;
|
|
}
|
|
|
|
/* This element covers the first half of the area traveled by the animated target. If the animation did not
|
|
respect the playbackRate, then red would appear since the animated target would travel to the right of
|
|
the cover element. */
|
|
#cover {
|
|
left: 100px;
|
|
width: 200px;
|
|
}
|
|
|
|
</style>
|
|
<div id="target"></div>
|
|
<div id="cover"></div>
|
|
<script>
|
|
|
|
(async () => {
|
|
if (window.testRunner)
|
|
testRunner.waitUntilDone();
|
|
|
|
// Start an animation.
|
|
const animation = document.getElementById("target").animate({ transform: ["translateX(100px)", "translateX(300px)"] }, { duration: 1000, fill: "both" });
|
|
|
|
// Seek it to its halfway point, the target should align with the right edge of the cover.
|
|
animation.currentTime = animation.effect.getTiming().duration / 2;
|
|
|
|
// Make it play backwards.
|
|
animation.playbackRate = -1;
|
|
|
|
// Wait a few frames.
|
|
await animation.ready;
|
|
await new Promise(requestAnimationFrame);
|
|
await new Promise(requestAnimationFrame);
|
|
await new Promise(requestAnimationFrame);
|
|
|
|
// At this point, if the target were ignoring the playbackRate, it would peek a little to the right of the cover.
|
|
if (window.testRunner)
|
|
testRunner.notifyDone();
|
|
})();
|
|
|
|
</script>
|
|
</body>
|