javascript - 检查元素是否滚动到水平视图 50%
问题描述
我有水平可滚动的 div,其中包含列表(li)元素。如何检查特定列表元素是否滚动到水平视图中至少 50%?
解决方案
您可以使用要观看的父项和子项的 offsetLeft、clientWidth 和 scrollLeft。
elementToMonitor.parentNode.addEventListener("scroll", function(event) {
const visible = this.scrollLeft + this.clientWidth,
isStartVisible = visible >= elementToMonitor.offsetLeft + (elementToMonitor.clientWidth / 2),
isEndVisible = visible <= elementToMonitor.offsetLeft + this.clientWidth + (elementToMonitor.clientWidth / 2);
// if both are true, item is visible relative to scroll position
// this does not mean, it is visible in the viewport
if (isStartVisible && isEndVisible) {
elementToMonitor.setAttribute("style", `color: white; background-color: purple; border: 5px solid green; border-radius: 1em;`);
} else {
elementToMonitor.removeAttribute("style");
}
});
div {
overflow: auto;
white-space: nowrap;
}
span {
display: inline-block;
border: 1px solid black;
margin-right: 0.5em;
}
.spacer {
width: 100vw;
}
.spacer::before {
content: "Placeholder";
}
<div>
<span class="spacer"></span>
<span id="elementToMonitor">Make me purple!</span>
<span class="spacer"></span>
</div>
推荐阅读
- c# - Xamarin 形成 UWP 工具提示
- sql - UPSERT for "INSERT INTO tab SELECT * FROM another_tab"
- regex - 对文件中特定重复单词的频率进行排序
- python - 关于numpy相关的问题:没有给出预期的结果
- python - 读取训练进度日志文件,但其中写入了二进制文件
- php - 如何从远程图像 URL 获取 $_FILES 数组?
- spreadsheet - 什么函数可以更新excel文件的公式?
- git - 如何将从 perforce 克隆的本地存储库合并到现有的 GitHub 存储库中
- reactjs - 如何从域中删除 PWA 服务工作者
- cplex - 如何克服 CPLEX OPL 中的内存溢出 1001 错误