1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86
|
<!DOCTYPE html>
<link rel="help" href="https://drafts.csswg.org/css-scroll-snap-1" />
<script src="/resources/testharness.js"></script>
<script src="/resources/testharnessreport.js"></script>
<style>
div {
position: absolute;
margin: 0px;
}
#scroller {
height: 600px;
width: 600px;
overflow: scroll;
scroll-snap-type: both mandatory;
}
#space {
width: 2000px;
height: 2000px;
}
.snap {
width: 200px;
height: 200px;
background-color: blue;
scroll-snap-align: start;
}
#left-top {
left: 0px;
top: 0px;
}
#right-top {
left: 800px;
top: 0px;
}
#left-bottom {
left: 0px;
top: 800px;
}
#right-bottom {
left: 1800px;
top: 1800px;
scroll-margin-top: 1000px;
scroll-margin-left: 1000px;
}
</style>
<div id="scroller">
<div id="space"></div>
<div id="left-top" class="snap"></div>
<div id="right-top" class="snap"></div>
<div id="left-bottom" class="snap"></div>
<div id="right-bottom" class="snap"></div>
</div>
<script>
var scroller = document.getElementById("scroller");
test(() => {
scroller.scrollTo(0, 0);
assert_equals(scroller.scrollLeft, 0);
assert_equals(scroller.scrollTop, 0);
scroller.scrollTo(300, 0);
assert_equals(scroller.scrollLeft, 800);
assert_equals(scroller.scrollTop, 0);
}, 'Only snap to visible area on X axis, even when the non-visible ones are closer');
test(() => {
scroller.scrollTo(0, 0);
assert_equals(scroller.scrollLeft, 0);
assert_equals(scroller.scrollTop, 0);
scroller.scrollTo(0, 300);
assert_equals(scroller.scrollLeft, 0);
assert_equals(scroller.scrollTop, 800);
}, 'Only snap to visible area on Y axis, even when the non-visible ones are closer');
test(() => {
scroller.scrollTo(0, 0);
assert_equals(scroller.scrollLeft, 0);
assert_equals(scroller.scrollTop, 0);
scroller.scrollTo(300, 300);
assert_equals(scroller.scrollLeft, 800);
assert_equals(scroller.scrollTop, 800);
}, 'snap to snap area inflated by scroll-margin, even when the non-visible ones are closer');
</script>
|