我想创建一个自动幻灯片,我把它放在画布上,并且我可以用滑块控制幻灯片的速度。在我考虑画布之前,我想专注于滑块。
如何使滑块与幻灯片配合使用,以便控制速度,延迟在 1 秒到 5 秒之间?
这是我的代码。
<!DOCTYPE html>
<html>
<head>
<meta name="viewport" content="width=device-width, initial-scale=1">
<style>
* {box-sizing: border-box;}
body {
font-family: Verdana, sans-serif;
}
.mySlides {
display: none;
}
img {
vertical-align: middle;
}
/* Slideshow container */
.slideshow-container {
max-width: 1000px;
position: relative;
margin: auto;
}
.dot {
height: 10px;
width: 10px;
margin: 0 2px;
background-color: #bbb;
border-radius: 50%;
display: inline-block;
transition: background-color 0.6s ease;
}
.active {
background-color: #717171;
}
/* Fading animation */
.fade {
-webkit-animation-name: fade;
-webkit-animation-duration: 1.5s;
animation-name: fade;
animation-duration: 1.5s;
}
@-webkit-keyframes fade {
from {opacity: .4}
to {opacity: 1}
}
@keyframes fade {
from {opacity: .4}
to {opacity: 1}
}
</style>
</head>
<body>
<div class="slideshow-container">
<div class="mySlides fade">
<img src="1.png" style="width:100%">
</div>
<div class="mySlides fade">
<img src="2.png" style="width:100%">
</div>
<div class="mySlides fade">
<img src="3.png" style="width:100%">
</div>
<div class="mySlides fade">
<img src="4.png" style="width:100%">
</div>
<div class="mySlides fade">
<img src="5.png" style="width:100%">
</div>
<div class="mySlides fade">
<img src="6.png" style="width:100%">
</div>
</div>
<div style="text-align:center">
<span class="dot"></span>
<span class="dot"></span>
<span class="dot"></span>
<span class="dot"></span>
<span class="dot"></span>
<span class="dot"></span>
</div>
<div style="text-align:right">
<input id="speed" name="speed" type="range" min="1" max="5" value="3">
<p style="color: black">Value: <span id="speedValue"></span></p>
<script>
var slider = document.getElementById("speed");
var output = document.getElementById("speedValue");
output.innerHTML = slider.value;// Display the default slider value
// Update the current slider value (each time you drag the slider handle)
slider.oninput = function() {
output.innerHTML = this.value;
}
</script>
</div>
<script>
var slideIndex = 0;
showSlides();
function showSlides() {
var i;
var slides = document.getElementsByClassName("mySlides");
var dots = document.getElementsByClassName("dot");
for (i = 0; i < slides.length; i++) {
slides[i].style.display = "none";
}
slideIndex++;
if (slideIndex > slides.length) {slideIndex = 1}
for (i = 0; i < dots.length; i++) {
dots[i].className = dots[i].className.replace(" active", "");
}
slides[slideIndex-1].style.display = "block";
dots[slideIndex-1].className += " active";
setTimeout(showSlides, 2000);
}
</script>
</body>
</html>
您已经接近了这一点,您只需要在showSlides()
函数中使setTimeout
基于滑块中的值。
这是我在你的JSFiddle中是如何做到的:
速度模组变量
var speedMod = 3
创建一个新的全局变量,我称之为我的speedMod
,但你可以给它命名任何东西。我还将值默认为 3
,因为这是您的滑块默认值,但您也可以更改它。
slider.oninput = function((
现在我们要添加代码以在滑块更改时修改我们的全局变量。在slider.oninput = function()
添加以下行speedMod = this.value;
。您的整个函数将如下所示:
slider.oninput = function() {
output.innerHTML = this.value;
speedMod = this.value;
}
显示幻灯片功能
最后一块是根据我们的speedMod
值进行超时。这可以通过替换以下内容来实现:
setTimeout(showSlides, 2000);
跟
setTimeout(showSlides, speedMod*1000);
请记住包括*1000
,因为setTimeout()
以毫秒为单位工作,而不是整秒。
如果您需要更多帮助,请告诉我。
包含更改的完整 JSFiddle