| <!DOCTYPE html> |
| <head> |
| <title>Test that scroll anchoring is suppressed when scroll offset is zero.</title> |
| <link rel="author" title="Nick Burris" href="mailto:nburris@chromium.org"> |
| <link rel="help" href="https://drafts.csswg.org/css-scroll-anchoring/"> |
| <script src="/resources/testharness.js"></script> |
| <script src="/resources/testharnessreport.js"></script> |
| </head> |
| <style> |
| #header { |
| height: 100px; |
| border: 1px solid black; |
| overflow-anchor: none; |
| } |
| #content { |
| height: 200vh; |
| } |
| </style> |
| <div id="header"></div> |
| <div id="content">abc</div> |
| <script> |
| window.addEventListener("scroll", function() { |
| if (document.scrollingElement.scrollTop > 0) { |
| // On the first scroll event, shrink the header. Scroll anchoring anchors to |
| // content, but the header shrinks by more than the scroll offset so the |
| // resulting scroll position is zero. |
| step_timeout(function() { |
| document.querySelector("#header").style.height = "50px"; |
| }, 0); |
| } else { |
| // On the second scroll event, grow the header. Since the scroll offset is |
| // zero, scroll anchoring should be suppressed. Otherwise, scroll anchoring |
| // would anchor to content and the resulting scroll position would be 50px. |
| step_timeout(function() { |
| document.querySelector("#header").style.height = "100px"; |
| }, 0); |
| } |
| }); |
| |
| async_test(function(t) { |
| // Scroll down a bit to trigger the scroll event listener. |
| window.scrollTo(0, 10); |
| |
| window.requestAnimationFrame(function() { |
| window.requestAnimationFrame(function() { |
| window.requestAnimationFrame(t.step_func_done(() => { |
| assert_equals(document.scrollingElement.scrollTop, 0); |
| })); |
| }); |
| }); |
| |
| }, "Scroll anchoring suppressed when scroll offset is zero."); |
| </script> |