LibWeb: Don't skip last keyframe

This commit is contained in:
Gingeh 2025-06-19 13:13:53 +10:00 committed by Jelle Raaijmakers
commit 4292344729
Notes: github-actions[bot] 2025-06-23 19:02:33 +00:00
3 changed files with 46 additions and 2 deletions

View file

@ -1334,8 +1334,10 @@ void StyleComputer::collect_animation_into(DOM::Element& element, Optional<CSS::
return keyframes.begin();
}
auto potential_match = keyframes.find_largest_not_above_iterator(key);
if (output_progress.value() >= 0) {
return --potential_match;
auto next = potential_match;
++next;
if (next.is_end()) {
--potential_match;
}
return potential_match;
}();

View file

@ -0,0 +1,3 @@
rect.left > 0: true
rect.left <= 100: true
rect.top > 0: true

View file

@ -0,0 +1,39 @@
<!DOCTYPE html>
<style>
#foo {
animation: 1s forwards linear anim;
animation-play-state: paused;
position: absolute;
}
@keyframes anim {
0% {
left: 0px;
top: 0px;
}
50% {
left: 100px;
top: 0px;
}
100% {
left: 100px;
top: 100px;
}
}
</style>
<div id="foo"></div>
<script src="../include.js"></script>
<script>
asyncTest(async (done) => {
const foo = document.getElementById("foo");
const anim = foo.getAnimations()[0];
anim.onfinish = function () {
const rect = foo.getBoundingClientRect();
println("rect.left > 0: " + (rect.left > 0));
println("rect.left <= 100: " + (rect.left <= 100));
println("rect.top > 0: " + (rect.top > 0));
done();
};
anim.play();
});
</script>