【发布时间】:2020-12-09 03:06:47
【问题描述】:
我有 2 个按钮,它们激活/停用 div,按钮下一个激活下一个 div,按钮 prev 停用当前 div。 每次点击都会调用函数更新,我试图了解在这种情况下比较数组的索引和 currentActive 如何帮助我们。 我注释掉其余代码以遵循 idx 的值,但我对输出感到困惑......................
const progress = document.getElementById('progress');
const prev = document.getElementById('prev');
const next = document.getElementById('next');
const circles = document.querySelectorAll('.circle');
let currentActive = 1;
next.addEventListener('click', () => {
currentActive++;
if (currentActive > circles.length) {
currentActive = circles.length;
}
update();
});
prev.addEventListener('click', () => {
currentActive--;
if (currentActive < 1) {
currentActive = 1;
}
update();
});
function update() {
console.log(' - - - - - - - - ')
console.log('update function, currentActive = '+ currentActive )
circles.forEach((circle, idx) => {
console.log('idx->'+ idx + ', ==Active?->' + (idx===currentActive) + ', div->' + circle.textContent )
// if (idx < currentActive) {
// console.log('index is:' + idx, 'current is :' + currentActive);
// circle.classList.add('active');
// }
/* else {
circle.classList.remove('active');
}
});
if (currentActive === 1) {
prev.disabled = false;
} else if (currentActive === circles.length) {
next.disabled = true;
prev.disabled = false;
} else {
prev.disabled = false;
next.disabled = false;
} */
});
}
.as-console-wrapper {
top : 0;
left : 30% !important;
max-height : 100% !important;
width : 70%;
}
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8" />
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
<link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/font-awesome/5.15.1/css/all.min.css" integrity="sha512-+4zCK9k+qNFUR5X+cKL9EIR+ZOhtIloNl9GIKS57V1MyNsYpYcUrUeQc9vNfzsWfV28IaLL3i96P9sdNyeRssA==" crossorigin="anonymous" />
<link rel="stylesheet" href="style.css" />
<title>Progress Steps</title>
<div class="container">
<div class="progress-container">
<div class="progress" id="progress"></div>
<div class="circle active">1</div>
<div class="circle">2</div>
<div class="circle">3</div>
<div class="circle">4</div>
</div>
<button class="btn" id="prev" disabled>Prev</button>
<button class="btn" id="next">Next</button>
</div>
</head>
<body>
<script src="script.js"></script>
</body>
</html>
【问题讨论】:
-
它遍历所有具有包含
circle的类的元素 -
如果你的意思是类圈,控制台日志的输出应该是数组的4个元素,为什么只有2个? idx开头的值是多少?
-
你有一个条件......所以,不,它不仅仅是 2......它是 2,然后是 3,然后是 4,当你点击下一步时 - 你的条件意味着 console.log 不会一直运行迭代,但每次迭代都在运行
-
@Bravo 有 for 循环背景让我感到困惑。如果我错了,请纠正我:forEach 没有计数器,它通过数组并根据应用的条件显示输出。对吗?
-
就像你用英语说的。对于圆圈中的每个圆圈,请执行此操作(函数的主体)。你不能在这里使用
for循环,因为circles不是一个实际的数组,而是一个NodeList。但是,您可以使用Array.from(circles)将其转换为数组。
标签: javascript foreach