blob: 4a5003600ec9404c135cbf89d197038a2e45afc5 [file] [log] [blame]
<!DOCTYPE html>
<!--
| This test checks that the intersection ratios are correctly computed when
| there are multiple intersection observers.
| The target elements are initially transparent, but if the intersection ratios
| are computed correctly they turn opaque (become visibly green and yellow).
| https://www.w3.org/TR/intersection-observer/
-->
<html>
<head>
<style>
div {
position: absolute;
}
#firstroot {
background-color: red;
width: 200px;
height: 100px;
margin: 10px;
margin-left: 25px;
}
#secondroot {
background-color: blue;
width: 100px;
height: 200px;
margin-left: 300px;
}
#firsttarget {
background-color: rgba(0, 128, 0, 0);
width: 50px;
height: 75px;
margin-left: -175px;
}
#secondtarget {
background-color: rgba(255, 255, 0, 0);
width: 80px;
height: 50px;
margin-left: 50px;
}
</style>
</head>
<body>
<div id="firstroot">
<div id="secondroot">
<div id="secondtarget">
<div id="firsttarget">
</div>
</div>
</div>
</div>
<script>
if (window.testRunner) {
window.testRunner.waitUntilDone();
}
window.addEventListener("load", function() {
var firstRootElement = document.querySelector('#firstroot');
var secondRootElement = document.querySelector('#secondroot');
var firstTargetElement = document.querySelector('#firsttarget');
var secondTargetElement = document.querySelector('#secondtarget');
var firstIntersectionRatio = 0.5;
var secondIntersectionRatio = 0.625;
function handleIntersect(entries, observer) {
entries.forEach(function(entry) {
console.log(entry.intersectionRatio);
if (entry.target == firstTargetElement &&
entry.intersectionRatio == firstIntersectionRatio) {
entry.target.style.backgroundColor = "rgba(0, 128, 0, 255)";
}
if (entry.target == secondTargetElement &&
entry.intersectionRatio == secondIntersectionRatio) {
entry.target.style.backgroundColor = "rgba(255, 255, 0, 255)";
}
});
}
function createObservers() {
var observer;
var firstOptions = {
root: firstRootElement,
rootMargin: "0px",
threshold: 0.0
};
var secondOptions = {
root: secondRootElement,
rootMargin: "0px",
threshold: 0.0
};
firstObserver = new IntersectionObserver(handleIntersect, firstOptions);
secondObserver = new IntersectionObserver(handleIntersect, secondOptions);
firstObserver.observe(firstTargetElement);
secondObserver.observe(secondTargetElement);
}
createObservers();
if (window.testRunner) {
window.testRunner.DoNonMeasuredLayout();
window.setTimeout(function() { window.testRunner.notifyDone(); }, 0);
}
});
</script>
</body>
</html>