我想模拟像"当前页"使用div(如PDF阅读器)
document.addEventListener("DOMContentLoaded", function(event) {
var container = document.getElementById("container");
container.onscroll = function() {
let position = container.scrollTop;
let divs = document.querySelectorAll('.page');
for (div of divs) {
//???
}
}
});
#container {
width: 400px;
height: 600px;
overflow: auto;
}
.page {
width: 400px;
}
.red {
background-color: red;
height: 600px;
}
.blue {
background-color: blue;
height: 400px;
}
Current page: <span id="page-counter">1</span>
<div id='container'>
<div id="div-1" class="page red"></div>
<div id="div-2" class="page blue"></div>
<div id="div-3" class="page red"></div>
<div id="div-4" class="page blue"></div>
</div>
因此,我想知道最好的方法,例如,当第三个div "出现"时,将span页计数器文本更改为"3"。
大概是这样的https://i.imgur.com/rXQ2Bw8.png
提前感谢Celso
3条答案
按热度按时间4xrmg8kj1#
因为这个问题从来没有标记jQuery,这里有一个纯Javascript的解决方案,它可以模拟你所寻找的行为。这个解决方案计算容器中当前可见的每个子元素的像素数。如果像素数大于或等于容器大小的一半,它就认为这是你的访问者正在查看的页面。
ogsagwnx2#
这里的一般方法是编写一个函数来确定给定的HTML元素是否在viewport中。您可以在用户滚动时运行检查。请参阅下面的jQuery示例片段。我不一定说这是最好的方法,但它似乎正在工作。开始滚动可以看到ID出现。
g2ieeal73#
你可以在jQuery中使用is visible特性,只需要给予每个div一个唯一的ID或者类。
然后要删除活动类,可以将其与else语句配对,以删除非活动div的类。