【问题标题】:How to make a javascript slider that slides automatically如何制作一个自动滑动的javascript滑块
【发布时间】:2016-10-20 21:21:10
【问题描述】:

我正在尝试为我的 html 页面创建一个滑块,

我在 css/javascript 中找到了这个滑块,一切正常,但是我怎样才能使幻灯片也自动滑动,而不是仅在用户按下箭头时才滑动?

var slideIndex = 1;
showDivs(slideIndex);

function plusDivs(n) {
  showDivs(slideIndex += n);
}

function currentDiv(n) {
  showDivs(slideIndex = n);
}

function showDivs(n) {
  var i;
  var x = document.getElementsByClassName("mySlides");
  var dots = document.getElementsByClassName("demo");
  if (n > x.length) {
    slideIndex = 1
  }
  if (n < 1) {
    slideIndex = x.length
  }
  for (i = 0; i < x.length; i++) {
    x[i].style.display = "none";
  }
  for (i = 0; i < dots.length; i++) {
    dots[i].className = dots[i].className.replace(" w3-white", "");
  }
  x[slideIndex - 1].style.display = "block";
  dots[slideIndex - 1].className += " w3-white";
  setTimeout(2000); // Change image every 2 seconds

}
<!DOCTYPE html>
<html>
<title>W3.CSS</title>
<meta name="viewport" content="width=device-width, initial-scale=1">
<link rel="stylesheet" href="http://www.w3schools.com/lib/w3.css">
<style>
  .mySlides {
    display: none
  }
  .w3-left,
  .w3-right,
  .w3-badge {
    cursor: pointer
  }
  .w3-badge {
    height: 13px;
    width: 13px;
    padding: 0
  }
</style>

<body>

  <div class="w3-container">
    <h2>Slideshow Indicators</h2>
    <p>An example of using buttons to indicate how many slides there are in the slideshow, and which slide the user is currently viewing.</p>
  </div>

  <div class="w3-content w3-display-container" style="max-width:800px">
    <img class="mySlides" src="img_nature_wide.jpg" style="width:100%">
    <img class="mySlides" src="img_fjords_wide.jpg" style="width:100%">
    <img class="mySlides" src="img_mountains_wide.jpg" style="width:100%">
    <div class="w3-center w3-section w3-large w3-text-white w3-display-bottomleft" style="width:100%">
      <div class="w3-left w3-padding-left w3-hover-text-khaki" onclick="plusDivs(-1)">&#10094;</div>
      <div class="w3-right w3-padding-right w3-hover-text-khaki" onclick="plusDivs(1)">&#10095;</div>
      <span class="w3-badge demo w3-border w3-transparent w3-hover-white" onclick="currentDiv(1)"></span>
      <span class="w3-badge demo w3-border w3-transparent w3-hover-white" onclick="currentDiv(2)"></span>
      <span class="w3-badge demo w3-border w3-transparent w3-hover-white" onclick="currentDiv(3)"></span>
    </div>
  </div>

  <script>
  </script>

</body>

</html>

【问题讨论】:

  • 看看setTimeoutsetInterval
  • 这不是你使用setTimeout(2000);的方式。你需要传递一个函数调用

标签: javascript jquery slider


【解决方案1】:

您好,我刚刚实现了频繁滑动图像的逻辑..

试试这个

<!DOCTYPE html>
<html>
<title>W3.CSS</title>
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.12.4/jquery.min.js"></script>
<meta name="viewport" content="width=device-width, initial-scale=1">
<link rel="stylesheet" href="http://www.w3schools.com/lib/w3.css">
<style>
.mySlides {display:none}
.w3-left, .w3-right, .w3-badge {cursor:pointer}
.w3-badge {height:13px;width:13px;padding:0}
</style>
<body>

<div class="w3-container">
  <h2>Slideshow Indicators</h2>
  <p>An example of using buttons to indicate how many slides there are in the slideshow, and which slide the user is currently viewing.</p>
</div>

<div class="w3-content w3-display-container" style="max-width:800px">
  <img class="mySlides" alt="sample test1" src="mfdg2.jpg" style="width:100%">
  <img class="mySlides" alt="sample test2" src="img2.jpg" style="width:100%">
  <img class="mySlides"  alt="sample test3" src="img1.jpg" style="width:100%">
</div>

<script>
showDivs(1);

function plusDivs(n) {
  n=n+1;
  showDivs(n);
}

function showDivs(n) {
  var i;
  var x = document.getElementsByClassName("mySlides");
  if (n > x.length) {n = 1}

  for (i = 0; i < x.length; i++) {
     x[i].style.display = "none";
  }

  x[n-1].style.display = "block";
setTimeout(function() {   //calls click event after a certain time
   plusDivs(n);
}, 2000);

}

</script>

</body>
</html>

它对我有用..

【讨论】:

  • 它不适合我,我试过你的代码,但图像没有自动改变......
【解决方案2】:

在你的情况下 setInterval() 应该是全局的。

 setInterval(function(){
     slideIndex = slideIndex +1;
     showDivs(slideIndex)
 }, 2000);

https://jsfiddle.net/g9a2ez4s/

【讨论】:

    【解决方案3】:

    使用 setInterval

    setInterval(function(){
     document.getElementsByClassName("w3-left").click();
     }, 800);
    

    【讨论】:

      猜你喜欢
      • 2012-10-19
      • 1970-01-01
      • 2017-06-07
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多