我目前正在为建筑师开发一个小型网站。 我实现的目标是让方面尽可能简单。
因此,我将该网站创建为一页网站。您可以浏览不同的子页面而无需重新加载,也无需使用php。只是HTML5和CSS3。
但客户希望项目可以滑动。 幸运的是我在w3(https://www.w3schools.com/howto/howto_js_slideshow.asp)
上找到了合适的滑块最简单的我可以找到prev和next按钮,自动滑动和使用vanilla JS。 您可以在使用滑块时浏览项目。 内容只是在前台使用了一个小空间,项目图片取代了网站的整个背景。 但它使用了setTimeout,这让我发疯了。
只要用户没有点击下一个或上一个按钮,一切都很完美。幻灯片十分疯狂。 (当然,这个问题很常见,stackoverflow上有一些线程,但我找不到适合我项目的答案!)
我尝试了一些方法,但我在JavaScript方面并不是很好。
<script>
"use strict";
var slideIndex = 1;
showDivs(slideIndex);
function plusDivs(n) {
showDivs(slideIndex += n);
}
function showDivs(n) {
var i;
var x = document.getElementsByClassName("mySlides");
if (n==undefined){n = ++slideIndex;}
if (n > x.length) {slideIndex = 1;}
if (n < 1) {slideIndex = x.length;}
for (i = 0; i < x.length; i++) {
x[i].style.display = "none";
}
x[slideIndex-1].style.display = "block";
setTimeout(showDivs, 8000); // Change image every 8 seconds
}
</script>
这是我目前正在使用的代码。 每张幻灯片后有没有办法重置计时器? 我已经阅读过关于clearTimeout的内容,但无法让它正常工作。
感谢任何帮助。谢谢你们。
答案 0 :(得分:0)
啊,所以你需要更改代码以将超时存储到变量中,以便取消它。
var timer;
function showDivs (n) {
/* the code */
if (timer) clearTimeout(timer)
timer = setTimeout(showDivs, 8000);
}
答案 1 :(得分:0)
您需要清除在showDivs
<script>
"use strict";
var slideIndex = 1;
var timeOutId;
showDivs(slideIndex);
function plusDivs(n) {
showDivs(slideIndex += n);
}
function showDivs(n) {
// Stop the timeout from triggering.
clearTimeout(timeOutId);
var i;
var x = document.getElementsByClassName("mySlides");
if (n==undefined){n = ++slideIndex;}
if (n > x.length) {slideIndex = 1;}
if (n < 1) {slideIndex = x.length;}
for (i = 0; i < x.length; i++) {
x[i].style.display = "none";
}
x[slideIndex-1].style.display = "block";
// Schedule a new timeout.
timeOutId = setTimeout(showDivs, 8000); // Change image every 8 seconds
}