【发布时间】:2021-08-29 07:54:12
【问题描述】:
我已经编写了这段代码。它每 1000 毫秒使用 css 转换像卡片翻转一样旋转两个 div,并在 div 中显示新文本,该文本是从数组中绘制的。它无限运行。
但是一旦数组到达末尾,我会得到一个“未定义”值,因为 i++ 在最后一个数组项上递增。我一直在疯狂地试图弄清楚如何防止这种情况。有什么帮助吗?
Codepen:https://codepen.io/warpigs666/pen/OJpBKdy
<style>
#flip-card {
width: 100px;
height: 50px;
}
#flip-card-inner {
position: relative;
width: 100%;
height: 100%;
transition: transform 0.6s;
transform-style: preserve-3d;
}
#textDiv1 {
background-color: lightblue;
position: absolute;
width: 100%;
height: 100%;
backface-visibility: hidden;
text-align: center;
}
#textDiv2 {
background-color: lightcoral;
position: absolute;
width: 100%;
height: 100%;
backface-visibility: hidden;
text-align: center;
transform: rotateX(180deg);
}
</style>
<body>
<div id="flip-card">
<div id="flip-card-inner">
<div id="textDiv1">
one
</div>
<div id="textDiv2">
set via script
</div>
</div>
</div>
<script>
var flipCard = document.getElementById('flip-card');
var flipCardInner = document.getElementById('flip-card-inner');
var textDiv1 = document.getElementById('textDiv1');
var textDiv2 = document.getElementById('textDiv2');
var wordArray = ["one", "two", "three", "four", "five"]
var i = 1;
function flipText(){
textDiv2.innerHTML = wordArray[i];
flipCardInner.style.transform = "rotateX(180deg)";
setTimeout(
function() {
textDiv1.innerHTML = wordArray[i++];
flipCardInner.style.transform = "rotateX(360deg)";
}, 1000
);
if (i<wordArray.length){
i++;
}
else {i=0;}
}
var flipIt = setInterval(flipText, 2000);
</script>
</body>
【问题讨论】:
-
你真的需要
wordArray[i++]吗?这可能是它过度增加的原因。如果您需要访问当前数组元素的 i + 1 成员,请改为使用wordArray[i + 1]。 -
我在回答,但后来意识到您的问题需要更多上下文。您能否将您的代码变成可运行的 sn-p 并更清楚地解释所需的行为是什么?
-
看看我更新答案的最后一部分 - 我想知道这是否是你正在寻找的那种东西 - 无限循环
-
谢谢,我不确定你对 i+1 的设想,但这根本不起作用,我认为它也可能,但它仍然会引发 undefined 并且还会导致其他问题.我已经更新了我的问题,我会将代码变成可运行的 sn-p。
-
我添加了一个codepen链接
标签: javascript html css arrays loops