63 lines
2 KiB
HTML
63 lines
2 KiB
HTML
<!DOCTYPE html>
|
|
<link rel="help" href="https://drafts.csswg.org/css-scroll-snap/#re-snap" />
|
|
<meta name="viewport" content="width=device-width,initial-scale=1">
|
|
<link rel="help" href="https://bugzilla.mozilla.org/show_bug.cgi?id=1946375">
|
|
<script src="/resources/testharness.js"></script>
|
|
<script src="/resources/testharnessreport.js"></script>
|
|
<style>
|
|
#scroller {
|
|
display: flex;
|
|
overflow-x: hidden;
|
|
scroll-snap-align: start;
|
|
scroll-snap-type: x mandatory;
|
|
width: 500px;
|
|
height: 200px;
|
|
position: absolute;
|
|
}
|
|
.child {
|
|
display: flex;
|
|
flex: 0 0 500px;
|
|
scroll-snap-align: start;
|
|
width: 500px;
|
|
height: 100%;
|
|
align-items: center;
|
|
justify-content: center;
|
|
font-size: 30px;
|
|
}
|
|
</style>
|
|
<div id="scroller">
|
|
<div class="child" style="background-color: blue;">1</div>
|
|
<div class="child" style="background-color: green;">2</div>
|
|
<div class="child" style="background-color: yellow;">3</div>
|
|
</div>
|
|
<script>
|
|
promise_test(async () => {
|
|
assert_equals(scroller.scrollLeft, 0, "The initial scroll position");
|
|
|
|
const scrollPromise = new Promise(resolve => {
|
|
scroller.addEventListener("scroll", resolve);
|
|
});
|
|
// Do an async scroll operation to the second child.
|
|
scroller.scrollTo({ left: 500, behavior: "smooth" });
|
|
|
|
// Wait a scroll event.
|
|
await scrollPromise;
|
|
|
|
// Assuming that the current scroll position is not yet the scroll
|
|
// destination, i.e. during the async scroll is runnig try to do
|
|
// a new async scroll operation to the third child.
|
|
const scrollendPromise = new Promise(resolve => {
|
|
scroller.addEventListener("scrollend", resolve);
|
|
});
|
|
scroller.scrollTo({ left: 1000, behavior: "smooth" });
|
|
await scrollendPromise;
|
|
|
|
assert_equals(scroller.scrollLeft, 1000,
|
|
"Now the scroll position should be 1000px");
|
|
|
|
// Change a child element width so that re-snapping will happen.
|
|
document.querySelectorAll(".child")[0].style.width = "501px";
|
|
|
|
assert_equals(scroller.scrollLeft, 1000, "The scroll position should stay");
|
|
});
|
|
</script>
|