javascript - 获取以视口顶部和底部为锚点的元素滚动百分比
问题描述
如何获得滚动元素的百分比,但视口的顶部为 0%,底部为 100%。此 codepen 向下滚动绿色 .wrapper 元素,设置基于视口顶部的百分比。当视口的底部(而不是顶部)通过 .wrapper 的底点(保留视口的顶部作为起点)时,我希望它是 100%。
$(document).ready(function() {
var el = $(".wrapper");
var wrapperHeight = el.outerHeight();
var wrapperTop = el.offset().top;
var wrapperBottom = el.offset().top + wrapperHeight;
$(window).bind('scroll', function() {
var scrolled = $(window).scrollTop();
if (scrolled > wrapperTop && scrolled < wrapperBottom) {
var percentageScrolled = ((scrolled - wrapperTop) / wrapperHeight) * 100;
$(".scrolled").text(parseInt(percentageScrolled));
}
});
});
.page {
height: 10000px;
background: red;
padding-top: 1000px;
}
.wrapper {
height: 1500px;
background: green;
}
.scrolled {
position: fixed;
top: 10px;
right: 30px;
z-index: 1;
}
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<div class="page">
<div class="wrapper">
</div>
</div>
<p class="scrolled"></p>
解决方案
这看起来像是十字路口观察员的工作
有了这个,您可以在一个或多个元素(基于选择器)变得可见或离开页面时触发回调函数。
首先你必须创建观察者:
var options = {
rootMargin: '0px',
threshold: 1.0
}
var observer = new IntersectionObserver(callback, options);
然后你设置一个应该关注的目标:
var target = document.querySelector('.wrapper');
observer.observe(target);
之后,您只需定义进入(或在您的情况下离开)视口的每个元素应该发生的情况:
var callback = function(entries, observer) {
entries.forEach(entry => {
// Each entry describes an intersection change for one observed
// target element:
});
};
推荐阅读
- security - 身份验证绕过
- winmerge - Winmerge 过滤器:排除路径\\文件夹
- javascript - 如何遍历所有按钮到单击事件侦听器
- python - 在 Gensim 中训练 word2vec 时如何控制随机性?
- python - 如何为熊猫中的每一行设置多个值
- mysql - ld:在 macOS Big Sur 11.4 上为 mysql2 gem Ruby 捆绑安装时找不到 -lzstd 的库
- bash - Linux shell - 以奇怪的格式解析日期
- java - 如何抑制具有 main 方法的类的 checkstyle HideUtilityClassConstructor 规则?
- javascript - 如何在 JS 的 cookie 中保存带有字典的列表?
- java - 在 JOOQ 的选择中使用 UNNEST