| <!DOCTYPE html> |
| <script src="../resources/js-test.js"></script> |
| <script src="../resources/intersection-observer-helper-functions.js"></script> |
| <style> |
| .target { |
| width: 100px; |
| height: 100px; |
| margin: 10px; |
| background-color: green; |
| } |
| </style> |
| <div style="width:100%; height:700px;"></div> |
| <div id="target1" class="target"></div> |
| <div id="target2" class="target"></div> |
| <div id="target3" class="target"></div> |
| |
| <script> |
| description("Verify that notifications for multiple targets are sorted by the order in which observe() was called on each target."); |
| var target1 = document.getElementById("target1"); |
| var target2 = document.getElementById("target2"); |
| var target3 = document.getElementById("target3"); |
| var entries = []; |
| var observer = new IntersectionObserver( |
| changes => { entries.push(...changes); } |
| ); |
| |
| onload = function() { |
| observer.observe(target1); |
| observer.observe(target2); |
| observer.observe(target3); |
| entries = entries.concat(observer.takeRecords()); |
| shouldBeEqualToNumber("entries.length", 0); |
| document.scrollingElement.scrollTop = 150; |
| waitForNotification(step0); |
| } |
| |
| function step0() { |
| shouldBeEqualToNumber("entries.length", 1); |
| if (entries.length > 0) |
| shouldBeEqualToString("entries[0].target.id", "target1"); |
| document.scrollingElement.scrollTop = 10000; |
| waitForNotification(step1); |
| } |
| |
| function step1() { |
| shouldBeEqualToNumber("entries.length", 3); |
| if (entries.length > 1) |
| shouldBeEqualToString("entries[1].target.id", "target2"); |
| if (entries.length > 2) |
| shouldBeEqualToString("entries[2].target.id", "target3"); |
| document.scrollingElement.scrollTop = 0; |
| waitForNotification(step2); |
| } |
| |
| function step2() { |
| shouldBeEqualToNumber("entries.length", 6); |
| if (entries.length > 3) |
| shouldBeEqualToString("entries[3].target.id", "target1"); |
| if (entries.length > 4) |
| shouldBeEqualToString("entries[4].target.id", "target2"); |
| if (entries.length > 5) |
| shouldBeEqualToString("entries[5].target.id", "target3"); |
| finishJSTest(); |
| } |
| </script> |