Javascript 滑动数组元素
Javascript slider through array elements
实际上 next() 和 previous() 按钮没有正常工作,这意味着如果第二个元素由 next 按钮显示,那么在单击 previous 按钮后必须显示第一个元素,但它从末尾开始.
另一个问题是,在使用 setTimeout() 函数后,当我单击下一步时,它会加快计时器的速度,因为它应该具有相同的自动播放速度。
var newsArr = ["my name is nouman", "i live in abbottabad", "the breaking news about Pakistan"];
var i = 1;
var x = document.getElementById("demo");
function next() {
if (i < newsArr.length) {
x.innerHTML = newsArr[i];
i++;
} else {
i = 0;
x.innerHTML = newsArr[i];
}
setTimeout(next, 2000);
}
function prev() {
if (i >= 0) {
x.innerHTML = newsArr[i];
i--;
} else {
i = newsArr.length - 1;
x.innerHTML = newsArr[i];
}
}
<div class="newsslider">
<p class="text" id="demo">my name is nouman </p>
<button class="btn1" type="button" class="prev" onclick="prev()">PREV</button>
<button class="btn2" type="button" class="next" onclick="next()">NEXT</button>
</div>
据我所知你想要什么:
每次调用下一个函数都会有一个新的超时开始。意味着如果你点击下一步 3 次。您将同时有 3 次超时 运行。这就是你看到它加速的方式。
解决方法是先清除运行 timeout再设置新的。这样你将永远最多有一个超时 运行.
此外,您可能想先更新索引,然后在无效时进行调整。否则你可能会遇到 i > arr.length
.
的奇怪情况
var newsArr = [
"my name is nouman",
"i live in abbottabad",
"the breaking news about Pakistan",
];
var i = 0;
var x = document.getElementById("demo");
var timeoutId;
function next() {
if (timeoutId) {
clearTimeout(timeoutId);
}
i++;
if (i < newsArr.length) {
x.innerHTML = newsArr[i];
} else {
i = 0;
x.innerHTML = newsArr[i];
}
timeoutId = setTimeout(next, 2000);
}
function prev() {
i--;
if (i >= 0) {
x.innerHTML = newsArr[i];
} else {
i = newsArr.length - 1;
x.innerHTML = newsArr[i];
}
}
<div class="newsslider">
<p class="text" id="demo">my name is nouman </p>
<button class="btn1" type="button" class="prev" onclick="prev()">PREV</button>
<button class="btn2" type="button" class="next" onclick="next()">NEXT</button>
</div>
实际上 next() 和 previous() 按钮没有正常工作,这意味着如果第二个元素由 next 按钮显示,那么在单击 previous 按钮后必须显示第一个元素,但它从末尾开始. 另一个问题是,在使用 setTimeout() 函数后,当我单击下一步时,它会加快计时器的速度,因为它应该具有相同的自动播放速度。
var newsArr = ["my name is nouman", "i live in abbottabad", "the breaking news about Pakistan"];
var i = 1;
var x = document.getElementById("demo");
function next() {
if (i < newsArr.length) {
x.innerHTML = newsArr[i];
i++;
} else {
i = 0;
x.innerHTML = newsArr[i];
}
setTimeout(next, 2000);
}
function prev() {
if (i >= 0) {
x.innerHTML = newsArr[i];
i--;
} else {
i = newsArr.length - 1;
x.innerHTML = newsArr[i];
}
}
<div class="newsslider">
<p class="text" id="demo">my name is nouman </p>
<button class="btn1" type="button" class="prev" onclick="prev()">PREV</button>
<button class="btn2" type="button" class="next" onclick="next()">NEXT</button>
</div>
据我所知你想要什么:
每次调用下一个函数都会有一个新的超时开始。意味着如果你点击下一步 3 次。您将同时有 3 次超时 运行。这就是你看到它加速的方式。
解决方法是先清除运行 timeout再设置新的。这样你将永远最多有一个超时 运行.
此外,您可能想先更新索引,然后在无效时进行调整。否则你可能会遇到 i > arr.length
.
var newsArr = [
"my name is nouman",
"i live in abbottabad",
"the breaking news about Pakistan",
];
var i = 0;
var x = document.getElementById("demo");
var timeoutId;
function next() {
if (timeoutId) {
clearTimeout(timeoutId);
}
i++;
if (i < newsArr.length) {
x.innerHTML = newsArr[i];
} else {
i = 0;
x.innerHTML = newsArr[i];
}
timeoutId = setTimeout(next, 2000);
}
function prev() {
i--;
if (i >= 0) {
x.innerHTML = newsArr[i];
} else {
i = newsArr.length - 1;
x.innerHTML = newsArr[i];
}
}
<div class="newsslider">
<p class="text" id="demo">my name is nouman </p>
<button class="btn1" type="button" class="prev" onclick="prev()">PREV</button>
<button class="btn2" type="button" class="next" onclick="next()">NEXT</button>
</div>