| <!DOCTYPE html> |
| <link rel="help" href="https://drafts.csswg.org/css-scroll-snap-1" /> |
| <title>Tests that window should snap at user scroll end.</title> |
| <script src="/resources/testharness.js"></script> |
| <script src="/resources/testharnessreport.js"></script> |
| <style> |
| body { |
| margin: 0px; |
| scroll-snap-type: both mandatory; |
| } |
| #content { |
| width: 2000px; |
| height: 2000px; |
| padding: 0px; |
| margin: 0px; |
| } |
| #target { |
| position: relative; |
| left: 400px; |
| top: 400px; |
| width: 400px; |
| height: 400px; |
| background-color: lightblue; |
| overflow: hidden; |
| scroll-snap-align: start; |
| } |
| #i1 { |
| color: red; |
| font-weight: bold; |
| } |
| </style> |
| |
| <div id="content"> |
| <div id="target"> |
| <h1>CSSScrollSnap</h1> |
| <h4>Tests that the window can snap at user scroll end.</h4> |
| <ol> |
| <li id="i1" style="color: red"> |
| Scroll the page vertically and horizontally. |
| Keep scrolling until background has turned yellow.</li> |
| <li id="i2"> Press the button "Done"</li> |
| </ol> |
| <input type="button" id="btn" value="DONE" style="width: 100px; height: 50px;"/> |
| </div> |
| </div> |
| |
| <script> |
| var snap_test = async_test('Tests that window should snap at user scroll end.'); |
| var body = document.body; |
| var button = document.getElementById("btn"); |
| var target = document.getElementById("target"); |
| var instruction1 = document.getElementById("i1"); |
| var instruction2 = document.getElementById("i2"); |
| var scrolled_x = false; |
| var scrolled_y = false; |
| var start_x = window.scrollX; |
| var start_y = window.scrollY; |
| |
| window.onscroll = function() { |
| if (scrolled_x && scrolled_y) { |
| body.style.backgroundColor = "yellow"; |
| instruction1.style.color = "black"; |
| instruction1.style.fontWeight = "normal"; |
| instruction2.style.color = "red"; |
| instruction2.style.fontWeight = "bold"; |
| return; |
| } |
| |
| scrolled_x |= window.scrollX != start_x; |
| scrolled_y |= window.scrollY != start_y; |
| } |
| |
| button.onclick = function() { |
| if (!scrolled_x || !scrolled_y) |
| return; |
| |
| snap_test.step(() => { |
| assert_equals(window.scrollX, target.offsetLeft, |
| "window.scrollX should be at snapped position."); |
| assert_equals(window.scrollY, target.offsetTop, |
| "window.scrollY should be at snapped position."); |
| }); |
| |
| // To make the test result visible. |
| var content = document.getElementById("content"); |
| body.removeChild(content); |
| snap_test.done(); |
| } |
| |
| </script> |