javascript - 在 setInterval 函数中传递计数变量
问题描述
我正在尝试遍历数组,每 3 秒更改 DOM 中某些项目的 innerHTML。此代码目前直接从 0(混合媒体艺术家)到 2(描述符),根本不显示 1(艺术教育家)。并且 console.log 为每个 setinterval 循环输出 0 1 2 。
谁能看到我做错了什么才能让它正常工作?
var heroItems = ['galleries', 'workshops', 'exhibitions'];
var heroBtns = ['view', 'sign UP', 'VIEW'];
var heroURLs = ['#', '#', '#'];
var descriptions = ['mixed media artist', 'art educator', 'descriptor'];
setInterval(function() {
for (var i = 0; i < descriptions.length; i++){
console.log(i)
changeDescription(i);
}
}, 3000);
function changeDescription(i) {
var descriptor = document.getElementById('descriptor').innerHTML = descriptions[i];
var hero = document.getElementById('hero').innerHTML = heroItems[i];
var heroRef = document.getElementById('heroref').setAttribute('href', heroURLs[i]);
var heroBtn = document.getElementById('herobtn').innerHTML = heroBtns[i];
}
解决方案
问题是,您不必在每次循环迭代后等待。在更改描述 3 次后,您只需等待一次。
在您的情况下,您也可以完全跳过循环。
var i = 0;
var timer = window.setInterval(function() {
changeDescription(i);
if (++i == descriptions.length) {
window.clearInterval(timer);
}
}, 3000);
推荐阅读
- node.js - Glitch 上的 NodeJS 应用程序未连接到远程 SQL Server
- python - 对于未满足的每个条件,从列表中删除多个项目
- vue.js - 如何在nuxt中使用“Vue-infinite-loading”而不通过axios加载数据?
- java - 在同一个标签中大摇大摆地分组控制器
- node.js - 如何从 Heroku 应用程序访问本地机器的串行端口 (USB) 数据?
- jenkins - Jenkins Environment Dashboard 保留数据超过 30 天
- automation - 使用 jmeter maven 插件测试订单执行
- html - 如何修复 pattern="[A-Za-z]" 输入字段
- azure-ad-b2c-custom-policy - 如何从令牌中提取包含 json 数组的 B2C 自定义声明
- php - SQLSTATE[HY000] [2002] 连接被拒绝 LARAVEL