我想创建一个自动幻灯片放置,放置在画布中,并且我可以使用滑块控制幻灯片放映的速度。在我考虑画布之前,我想专注于滑块。
如何使用我的幻灯片使我的滑块工作,以便我可以在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>
答案 0 :(得分:1)
您已接近此状态,您只需要使setTimeout
func中的showSlides()
基于滑块中的值。
以下是我在JSFiddle中的表现:
SpeedMod变量
var speedMod = 3
创建一个新的全局变量,我称之为我的speedMod
但你可以命名它。我还将值默认为3
,因为这是您的滑块默认值,但您也可以更改它。
slider.oninput = function()
现在我们要添加代码以在滑块更改时修改我们的全局变量。在slider.oninput = function()
中添加以下行speedMod = this.value;
。你的整个功能将如下所示:
slider.oninput = function() {
output.innerHTML = this.value;
speedMod = this.value;
}
showSlides功能
最后一部分是根据我们的speedMod
值进行超时。这可以通过替换:
setTimeout(showSlides, 2000);
与
setTimeout(showSlides, speedMod*1000);
请记住包含*1000
,因为setTimeout()
的工作时间为ms,而不是完整的秒数。
如果您需要更多帮助,请与我们联系。