| <!doctype html> | |
| <meta charset="utf-8"> | |
| <title>Overflow: intersection observer with overflow-clip-margin</title> | |
| <link rel="help" href="https://www.w3.org/TR/css-overflow-3/#propdef-overflow-clip-margin"> | |
| <link rel="author" title="Scott Violet" href="mailto:sky@chromium.org"> | |
| <script src="/resources/testharness.js"></script> | |
| <script src="/resources/testharnessreport.js"></script> | |
| <style> | |
| #clipped_container { | |
| overflow: clip; | |
| width: 100px; | |
| height: 100px; | |
| border: solid; | |
| overflow-clip-margin: 50px; | |
| } | |
| #big_green_div { | |
| position: relative; | |
| width: 1000px; | |
| height: 1000px; | |
| background: green; | |
| left: -200px; | |
| top: -200px; | |
| } | |
| /* These values ensure the element is vertically offscreen. */ | |
| .spacer { width: 150px; height: calc(100vh + 10px); } | |
| </style> | |
| <div class="spacer"></div> | |
| <div id="clipped_container"> | |
| <div id="big_green_div"></div> | |
| </div> | |
| <script> | |
| let t = async_test("ParentWithOverflowClipMargin"); | |
| let options = { | |
| threshold: 0, | |
| rootMargin: '0px' | |
| } | |
| // The 'big_green_div' is initially on screen due to | |
| // overflow-clip-margin of the parent. Once the observer is notified, the | |
| // overflow-clip-margin is reduced so that 'big_green_div' is no longer | |
| // on screen, and the observer should again be notified. | |
| let gotIntersects = false; | |
| let intersectionObserver = new IntersectionObserver((entries, observer) => { | |
| t.step(function() { assert_equals(1, entries.length); }); | |
| let entry = entries[0]; | |
| if (!gotIntersects) { | |
| t.step(function() { assert_true(entry.isIntersecting); }); | |
| gotIntersects = true; | |
| document.getElementById('clipped_container').style.overflowClipMargin = "0px"; | |
| } else { | |
| t.step(function() { assert_false(entry.isIntersecting); }); | |
| t.done(); | |
| }}, options); | |
| intersectionObserver.observe(document.getElementById('big_green_div')); | |
| </script> |