Status
Current QuickJS capability auditing records IntersectionObserver targets as effectively always intersecting. That is a dangerous compatibility lie: lazy loaders and deferred widgets can run at the wrong time even though the API appears present.
Scope
- Track observed targets and observer options (
root, rootMargin, thresholds) in bounded storage.
- Compute viewport/root intersection from current box geometry after layout/scroll.
- Deliver entries only when threshold/intersection state changes.
- Provide correct
isIntersecting, intersectionRatio, target identity, and practical bounding/intersection rectangles.
observe, unobserve, disconnect, and realm/navigation teardown must be safe.
A staged V1 may support viewport root + threshold 0 first, but unsupported option shapes must be explicit rather than returning always-true results.
Acceptance
An offscreen target reports non-intersecting, scrolling it into view crosses the expected state/threshold once, scrolling out reverses it, and disconnect stops callbacks. Verify against a controlled lazy-load pattern on the G3.
Status
Current QuickJS capability auditing records
IntersectionObservertargets as effectively always intersecting. That is a dangerous compatibility lie: lazy loaders and deferred widgets can run at the wrong time even though the API appears present.Scope
root,rootMargin, thresholds) in bounded storage.isIntersecting,intersectionRatio, target identity, and practical bounding/intersection rectangles.observe,unobserve,disconnect, and realm/navigation teardown must be safe.A staged V1 may support viewport root + threshold 0 first, but unsupported option shapes must be explicit rather than returning always-true results.
Acceptance
An offscreen target reports non-intersecting, scrolling it into view crosses the expected state/threshold once, scrolling out reverses it, and disconnect stops callbacks. Verify against a controlled lazy-load pattern on the G3.