blob: e4b097e62ae3902cb971dba751d496685c566bf6 [file] [log] [blame]
Xiaoming Shi73dfa202020-03-12 11:31:35 -07001<!DOCTYPE html>
2<script src="/resources/testharness.js"></script>
3<script src="/resources/testharnessreport.js"></script>
4<script src="../resources/intersection-observer-test-utils.js"></script>
5
6<style>
7body, html {
8 margin: 0;
9}
10pre, #log {
11 position: absolute;
12 top: 0;
13 left: 200px;
14}
15.testdiv {
16 font-size: 24px;
17}
18</style>
19
20<div class="testdiv">This is the <span id="target">target</span>.</div>
21<div class="testdiv" id="occluder">This is the occluder.</div>
22
23<script>
24var delay = 100;
25var entries = [];
26var target;
27var occluder;
28
29runTestCycle(function() {
30 target = document.getElementById("target");
31 occluder = document.getElementById("occluder");
32 assert_true(!!target, "target exists");
33 assert_true(!!occluder, "occluder exists");
34 var observer = new IntersectionObserver(function(changes) {
35 entries = entries.concat(changes)
36 }, {trackVisibility: true, delay: delay});
37 observer.observe(target);
38 entries = entries.concat(observer.takeRecords());
39 assert_equals(entries.length, 0, "No initial notifications.");
40 runTestCycle(step0, "First rAF.", delay);
41}, "IntersectionObserverV2 in a single document using the implicit root, with an occluding element.", delay);
42
43function step0() {
44 occluder.style.marginTop = "-10px";
45 runTestCycle(step1, "occluder.style.marginTop = '-10px'", delay);
46 assert_equals(entries.length, 1);
47 assert_true(entries[0].isVisible);
48}
49
50function step1() {
51 // Occluding elements with opacity=0 should not affect target visibility.
52 occluder.style.opacity = "0";
53 runTestCycle(step2, "occluder.style.opacity = 0", delay);
54 assert_equals(entries.length, 2);
55 assert_false(entries[1].isVisible);
56}
57
58function step2() {
59 assert_equals(entries.length, 3);
60 assert_true(entries[2].isVisible);
61}
62</script>