| <!DOCTYPE HTML> | |
| <html> | |
| <head> | |
| <script src="../resources/js-test-pre.js"></script> | |
| <style> | |
| #scrollable { | |
| width: 100px; | |
| height: 100px; | |
| border: 1px solid black; | |
| overflow-y: auto; | |
| } | |
| #container { | |
| width: 100px; | |
| height: 200px; | |
| } | |
| #box { | |
| position: relative; | |
| top: 100px; | |
| width: 100px; | |
| height: 100px; | |
| background-color: green; | |
| } | |
| </style> | |
| </head> | |
| <body> | |
| <div id="scrollable"> | |
| <div id="container"> | |
| <div id="box"></div> | |
| </div> | |
| </div> | |
| <script> | |
| var animateTimestamp = 0; | |
| var intersectTimestamp = 0; | |
| var MaxFrames = 2; | |
| var currentFrame = 0; | |
| function scrollBox() | |
| { | |
| var scrollable = document.querySelector("#scrollable"); | |
| var height = scrollable.clientHeight; | |
| scrollable.scroll(0, (height / MaxFrames) * currentFrame); | |
| document.body.offsetHeight; | |
| } | |
| function handleAnimate(timestamp) | |
| { | |
| if (++currentFrame > MaxFrames) { | |
| finishJSTest(); | |
| return; | |
| } | |
| animateTimestamp = timestamp; | |
| scrollBox(); | |
| requestAnimationFrame(handleAnimate); | |
| } | |
| function handleIntersect(entries, observer) | |
| { | |
| entries.forEach((entry) => { | |
| intersectTimestamp = entry.time; | |
| shouldBe("Math.round(animateTimestamp)", "Math.round(intersectTimestamp)"); | |
| }); | |
| } | |
| function buildThresholdList() | |
| { | |
| let thresholds = []; | |
| for (let i = 1.0; i <= MaxFrames; i++) { | |
| let ratio = i / MaxFrames; | |
| thresholds.push(ratio); | |
| } | |
| return thresholds; | |
| } | |
| function createObserver() | |
| { | |
| let observer; | |
| let options = { | |
| root: document.querySelector("#scrollable"), | |
| rootMargin: "0px", | |
| threshold: buildThresholdList() | |
| }; | |
| observer = new IntersectionObserver(handleIntersect, options); | |
| observer.observe(document.querySelector("#box")); | |
| } | |
| window.jsTestIsAsync = true; | |
| description("Test the IntersectionObserver timestamp is the same as the timestamp of the rAF callback."); | |
| createObserver(); | |
| requestAnimationFrame(handleAnimate); | |
| </script> | |
| <script src="../resources/js-test-post.js"></script> | |
| </body> | |
| </html> |