javascript - 如何检测以 javascript 结束的窗口滚动?
问题描述
我想在滚动结束后向所选元素添加一个类。如何检测以 JS 结束的滚动?
HTML
<ul class="list" id="wrapper">
<li>1</li>
<li>2</li>
<li>3</li>
<li>4</li>
<li>5</li>
<li>6</li>
<li id="element">7</li>
<li>8</li>
<li>9</li>
<li>10</li>
</ul>
JS
const element = document.getElementById('element');
const y = element.getBoundingClientRect().top + window.scrollY;
window.scroll({
top: y,
behavior: 'smooth'
});
解决方案
您可以requestAnimationFrame
用来检测何时scrollTop
大于y
requestAnimationFrame
就性能而言,比在滚动上同时设置间隔和事件侦听器要好得多。
const element = document.getElementById('element');
const y = element.getBoundingClientRect().top + window.scrollY;
function checkScrollEnd() {
if ((window.scrollY || document.body.scrollTop || document.documentElement.scrollTop) < y) {
window.requestAnimationFrame(checkScrollEnd);
}
else {
alert('end of scroll')
}
}
window.requestAnimationFrame(checkScrollEnd);
window.scroll({
top: y,
behavior: 'smooth'
});
推荐阅读
- java - 我需要一些帮助来使用 java 开始这个离散数学。我完全不知所措
- spring-boot - 在 Mac 上使用 Jhipster 和 maven 构建(并成功运行)一个 Jar,但无法在 Ubuntu 上运行
- python - 如何最小化python3.7应用程序docker镜像
- python - 无法捕获窗口标题python
- postgresql - jOOQ 生成成功后总是抱怨“没有找到适合createField的方法”
- c# - 实体框架扩展:带有更新语句的 BulkMerge
- image - 使用颤振从文件夹中读取图像
- android - 火炬:如何在另一个线程中注册一个火炬回调?
- python - 在 Python 中使用 __contains__ 方法
- c - 添加第二个循环