console
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Document</title>
<style>
ul {
width: 200px;
height: 200px;
border: 1px solid #000;
overflow-y: scroll;
}
li {
height: 40px;
margin: 10px;
width: 80%;
}
</style>
</head>
<body>
<ul id="parentElementId">
<li id="test1">test1</li>
<li id="test2">test2</li>
<li id="test3">test3</li>
<li id="test4">test4</li>
<li id="test5">test5</li>
<li id="test6">test6</li>
<li id="test7">test7</li>
<li id="test8">test8</li>
<li id="test9">test9</li>
<li id="test10">test10</li>
</ul>
<button onclick="test()">test</button>
<br>
<div id="result"></div>
<script>
function isChildInParentViewport(parentEl, childEl) {
const parentRect = parentEl.getBoundingClientRect();
const childRect = childEl.getBoundingClientRect();
return (
childRect.top >= parentRect.top &&
childRect.left >= parentRect.left &&
childRect.bottom <= parentRect.bottom &&
childRect.right <= parentRect.right
);
}
function test() {
const parentElement = document.getElementById('parentElementId');
var childrens = Array.from(document.querySelectorAll('li'))
var list = childrens.filter((item, index) => {
const isChildInViewport = isChildInParentViewport(parentElement, item);
return isChildInViewport
})
var ids = list.map(item => item.id)
document.querySelector('#result').innerHTML = '当前视窗内的元素有:' + ids
}
</script>
</body>
</html>