javascript - 在滚动时将 div 捕捉到页面顶部时出现问题
问题描述
当 div 的顶部到达页面的特定部分时,我试图.item
在滚动时将每个 div 捕捉到页面的顶部。现在这正在处理 div 一个但卡在那里
$(document).ready(function() {
var windowHeight = $(window).height(),
gridTop = windowHeight * .3,
gridBottom = windowHeight * .6;
$(window).on('scroll', function() {
$('.item').each(function() {
var thisTop = $(this).offset().top - $(window).scrollTop();
if ((thisTop >= gridTop) && (thisTop <= gridBottom)) {
console.log($(this).data('page'));
$('html, body').animate({
scrollTop: $(this).offset().top
}, 700);
}
});
});
});
body,
html {
width: 100%;
height: 100%;
}
.item {
border-top: 2px dashed #cccc;
border-bottom: 2px dashed #cccc;
height: 100vh;
display: -webkit-flex;
-webkit-align-items: center;
display: flex;
align-items: center;
justify-content: center
}
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<div class='item'>
<h1> Box 1 </h1>
</div>
<div class='item'>
<h1> Box 2 </h1>
</div>
<div class='item'>
<h1> Box 3 </h1>
</div>
<div class='item'>
<h1> Box 4 </h1>
</div>
<div class='item'>
<h1> Box 5 </h1>
</div>
<div class='item'>
<h1> Box 6 </h1>
</div>
<div class='item'>
<h1> Box 7 </h1>
</div>
<div class='item'>
<h1> Box 8 </h1>
</div>
<div class='item'>
<h1> Box 9 </h1>
</div>
解决方案
这看起来可以更好地使用Intersection Observer (IO)来完成,而不是监听滚动事件并计算一堆 xy 坐标和位置。
使用 IO,您可以检查元素之间的关系或与视口的关系。由于您想检查与窗口相交,您可以从选项中排除该root
选项:
let options = {
rootMargin: '0px',
threshold: 1.0
}
let observer = new IntersectionObserver(callback, options);
下一步是定义要观看的元素:
let targets = document.querySelectorAll('.item');
targets.forEach(target =>{
observer.observe(target);
});
最后,您指定回调函数中发生的情况。在这里,您将检查元素实际相交的数量,并根据您的逻辑将其捕捉到顶部:
let callback = (entries, observer) => {
entries.forEach(entry => {
// Each entry describes an intersection change for one observed
// target element
});
};
你可以使用w3c 的这个 polyfill来支持旧的浏览器。
推荐阅读
- c# - AddRedirectToWww() 不会重定向到 www 域
- xampp - 如何在没有 xampp 的情况下使用 ngrok
- php - 如何将变量存储在 yaml 文件中?
- python - 在 Jupyter 中使用单元魔法“%%time”的意外行为
- c# - 如何从另一个表单中读取一个类的属性值?
- python - 无法从另一个 python 代码访问 ListField 元素
- java - 在带有流的列表中收集具有最大值的对象
- vba - 需要 VBA 代码将形状(例如:向下箭头/向上箭头)放置在 power point 幻灯片中表格的特定单元格(基于单元格值)的顶部
- google-sheets - Google 表格的 QUERY 多张表格并返回唯一值
- swift - 删除子图层中的动画