javascript - Javascript在具有相同类但变量不同的多个div中运行函数
问题描述
我试图在滚动时使用相同的类在多个容器 div 中运行相同的函数。
我需要为每个容器计算不同的值并将它们用于该特定功能。问题是我需要使用类,而且我不知道每个页面将有多少个容器。
这是我的html:
<div class="div-container container">
<div class="div-inside"></div>
<div class="div-inside-2"></div>
<div class="div-inside"></div>
<div class="div-inside-2"></div>
</div>
<div class="div-container container">
<div class="div-inside"></div>
<div class="div-inside-2"></div>
<div class="div-inside"></div>
<div class="div-inside-2"></div>
</div>
<div class="div-container container">
<div class="div-inside"></div>
<div class="div-inside-2"></div>
<div class="div-inside"></div>
<div class="div-inside-2"></div>
</div>
这就是我正在尝试的
var p1 = document.getElementsByClassName('div-inside')
function moveDivinside() {
const divcont = document.querySelectorAll('.div-container')
divcont.forEach(element => {
let marginWintop = element.getBoundingClientRect().top;
let winHeight = window.innerHeight;
let difference = winHeight - (winHeight - marginWintop);
let p1n;
for (p1n = 0; p1n < p1.length; p1n++) {
p1[p1n].style.top = difference * .09 + 'px';
}
});
}
window.addEventListener('scroll', function () {
requestAnimationFrame(moveDivinside)
}, false)
似乎它只是从最后一个容器中获取数据。
解决方案
您需要稍微更改您的代码:
// this line needs to go:
// var p1 = document.getElementsByClassName('div-inside')
function moveDivinside() {
const divcont = document.querySelectorAll('.div-container');
divcont.forEach(element => {
// you need to select the elements inside the current element
var p1 = element.getElementsByClassName('div-inside');
let marginWinTop = element.getBoundingClientRect().top;
let winHeight = window.innerHeight;
let difference = winHeight - (winHeight - marginWinTop);
let p1n;
for (p1n = 0; p1n < p1.length; p1n++) {
p1[p1n].style.top = difference * 0.09 + 'px';
}
});
}
推荐阅读
- google-apps-script - 谷歌应用脚本失败总结
- java - 在片段内访问 TextView 会产生 NullPointerException
- html - 如何将项目符号添加到电子邮件模板的 .Body 部分?
- sql - 使用 CTE 更新 Snowflake
- events - Slack 事件 API - 用户提及
- c# - 如何从 Unity、C# 推送(附加)Firebase 实时数据库中的列表?
- java - 在 main 方法 java 之外初始化一个对象
- c++ - 为什么即使我安装了 fltk,我也不能使用 Stroustrup 的 PPP 的标头?
- android - 是否有学习如何创建此 xml 视图的指南或链接?
- geojson - 元数据库与 geojson 和属性的集成