简单 JavaScript 滑块无法正常工作

Simple JavaScript slider not functioning correctly

我正在尝试创建一个简单的 JavaScript 内容滑块,原理是我将所有 div 堆叠在一起,当我单击下一个或上一个时,它们会变成可见,其余隐藏。可悲的是,我只能让下一个按钮几乎不起作用,它应该循环但是当它到达最后一个 div 时它卡住了,上一个按钮根本不起作用。

这些是我怀疑导致问题的部分

// Next & Previous
  nrSlide=3;
  function Load(){
    nrShown = 0;
    vect = new Array(nrSlide + 1);
    vect[0] = document.getElementById("slide1");
    vect[0].style.visibility = "visible";
    for (var i = 1; i < nrSlide; i++)
    {
      vect[i] = document.getElementById("slide" + (i+1));
    }
  }
  function next(){
    nrShown++;
    if(nrShown == nrSlide)
      nrSlide=0;
      Effect();
    }
    function prev(){
      nrShown--;
      if(nrShown == -1)
        nrSlide= nrSlide -1;
        Effect();
      }
  // Effect
  function Effect(){
    for (var i=0; i < nrSlide; i++){
      vect[i].style.opacity = "0";
      vect[i].style.visibility = "hidden";
    }
    vect[nrShown].style.opacity = "1";
    vect[nrShown].style.visibility = "visible";
  }


  <div class="prev">
    <input type="button" value="previous" onClick="prev();"
  </div>
  <div class="next">
    <input type="button" value="next" onClick="next();"
  </div>

这是完整的脚本,不包括 css,因为我确定问题不在其中。另外请忽略其他 javascript (fence1-2-3) 我知道这很可怕,但我现在的问题是下一个和上一个

<?DOCTYPE html>
<html>
<head>
  <title> Module </title>
  <link rel="stylesheet" href="st2.css">
  <script>
  // Fence 1
  var fence1 = new Array(5);
  fence1[0] = new Image;
  fence1[0].src = "img/fence1/fence02.jpg";
  fence1[1] = new Image;
  fence1[1].src = "img/fence1/fence03.jpg";
  fence1[2] = new Image;
  fence1[2].src = "img/fence1/fence04.jpg";
  fence1[3] = new Image;
  fence1[3].src = "img/fence1/fence05.jpg";
  fence1[4] = new Image;
  fence1[4].src = "img/fence1/fence10.jpg";
  fence1[5] = new Image;
  fence1[5].src = "img/fence1/fence12.jpg";
  function fence10(){
    document.slide.src = fence1[0].src;
  }
  function fence11(){
    document.slide.src = fence1[1].src;
  }
  function fence12(){
    document.slide.src = fence1[2].src;
  }
  function fence13(){
    document.slide.src = fence1[3].src;
  }
  function fence14(){
    document.slide.src = fence1[4].src;
  }
  function fence15(){
    document.slide.src = fence1[5].src;
  }
  // Fence 2
  var fence2 = new Array(5);
  fence2[0] = new Image;
  fence2[0].src = "img/fence2/fence02.jpg";
  fence2[1] = new Image;
  fence2[1].src = "img/fence2/fence03.jpg";
  fence2[2] = new Image;
  fence2[2].src = "img/fence2/fence04.jpg";
  fence2[3] = new Image;
  fence2[3].src = "img/fence2/fence05.jpg";
  fence2[4] = new Image;
  fence2[4].src = "img/fence2/fence10.jpg";
  fence2[5] = new Image;
  fence2[5].src = "img/fence2/fence12.jpg";
  function fence20(){
    document.slide.src = fence2[0].src;
  }
  function fence21(){
    document.slide.src = fence2[1].src;
  }
  function fence22(){
    document.slide.src = fence2[2].src;
  }
  function fence23(){
    document.slide.src = fence2[3].src;
  }
  function fence24(){
    document.slide.src = fence2[4].src;
  }
  function fence25(){
    document.slide.src = fence2[5].src;
  }
  // Fence 3
  var fence3 = new Array(5);
  fence3[0] = new Image;
  fence3[0].src = "img/fence3/fence02.jpg";
  fence3[1] = new Image;
  fence3[1].src = "img/fence3/fence03.jpg";
  fence3[2] = new Image;
  fence3[2].src = "img/fence3/fence04.jpg";
  fence3[3] = new Image;
  fence3[3].src = "img/fence3/fence05.jpg";
  fence3[4] = new Image;
  fence3[4].src = "img/fence3/fence10.jpg";
  fence3[5] = new Image;
  fence3[5].src = "img/fence3/fence12.jpg";
  function fence30(){
    document.slide.src = fence3[0].src;
  }
  function fence31(){
    document.slide.src = fence3[1].src;
  }
  function fence32(){
    document.slide.src = fence3[2].src;
  }
  function fence33(){
    document.slide.src = fence3[3].src;
  }
  function fence34(){
    document.slide.src = fence3[4].src;
  }
  function fence35(){
    document.slide.src = fence3[5].src;
  }
  // Next & Previous
  nrSlide=3;
  function Load(){
    nrShown = 0;
    vect = new Array(nrSlide + 1);
    vect[0] = document.getElementById("slide1");
    vect[0].style.visibility = "visible";
    for (var i = 1; i < nrSlide; i++)
    {
      vect[i] = document.getElementById("slide" + (i+1));
    }
  }
  function next(){
    nrShown++;
    if(nrShown == nrSlide)
      nrSlide=0;
      Effect();
    }
    function prev(){
      nrShown--;
      if(nrShown == -1)
        nrSlide= nrSlide -1;
        Effect();
      }
  // Effect
  function Effect(){
    for (var i=0; i < nrSlide; i++){
      vect[i].style.opacity = "0";
      vect[i].style.visibility = "hidden";
    }
    vect[nrShown].style.opacity = "1";
    vect[nrShown].style.visibility = "visible";
  }


  </script>
</head>
<body onload="Load()">
  <div class="container">
    <div class="slider">
      <!-- First slide -->
      <div class="slides" id="slide1">
        <div class="menu-i">
          <div class="info">
            <p> Lorem ipsum dolor sit amet, consectetur adipiscing elit. Nam ultrices pellentesque facilisis. In semper tellus mollis nisl</p>
          </div>
        </div>
        <div class="menu">
          <div class="opt">
            <ul>
              <li>
                <input type="button" class="btn f1" onClick="fence10();">
              </li>
              <li>
                <input type="button" class="btn f2" onClick="fence11();">
              </li>
              <li>
                <input type="button" class="btn f3" onClick="fence12();">
              </li>
              <li>
                <input type="button" class="btn f4" onClick="fence13();">
              </li>
              <li>
                <input type="button" class="btn f5" onClick="fence14();">
              </li>
              <li>
                <input type="button" class="btn f6" onClick="fence15();">
              </li>
          </div>
        </div>
        <img src="img/fence1/fence02.jpg" name="slide">
      </div>
      <!-- Second slide -->
      <div class="slides" id="slide2">
        <div class="menu-i">
          <div class="info">
            <p> Lorem ipsum dolor sit amet, consectetur adipiscing elit. Nam ultrices pellentesque facilisis. In semper tellus mollis nisl</p>
          </div>
        </div>
        <div class="menu">
          <div class="opt">
            <ul>
              <li>
                <input type="button" class="btn f1" onClick="fence20();">
              </li>
              <li>
                <input type="button" class="btn f2" onClick="fence21();">
              </li>
              <li>
                <input type="button" class="btn f3" onClick="fence22();">
              </li>
              <li>
                <input type="button" class="btn f4" onClick="fence23();">
              </li>
              <li>
                <input type="button" class="btn f5" onClick="fence24();">
              </li>
              <li>
                <input type="button" class="btn f6" onClick="fence25();">
              </li>
            </div>
          </div>
          <img src="img/fence2/fence02.jpg" name="slide">
        </div>
        <!-- Third slider -->
        <div class="slides" id="slide3">
          <div class="menu-i">
            <div class="info">
              <p> Lorem ipsum dolor sit amet, consectetur adipiscing elit. Nam ultrices pellentesque facilisis. In semper tellus mollis nisl</p>
            </div>
          </div>
          <div class="menu">
            <div class="opt">
              <ul>
                <li>
                  <input type="button" class="btn f1" onClick="fence30();">
                </li>
                <li>
                  <input type="button" class="btn f2" onClick="fence31();">
                </li>
                <li>
                  <input type="button" class="btn f3" onClick="fence32();">
                </li>
                <li>
                  <input type="button" class="btn f4" onClick="fence33();">
                </li>
                <li>
                  <input type="button" class="btn f5" onClick="fence34();">
                </li>
                <li>
                  <input type="button" class="btn f6" onClick="fence35();">
                </li>
              </div>
            </div>
            <img src="img/fence1/fence04.jpg" name="slide">
          </div>
      </div>
    </div>

    <!-- Next & previous -->
    <div class="ctrl">
      <div class="prev">
        <input type="button" value="previous" onClick="prev();"
      </div>
      <div class="next">
        <input type="button" value="next" onClick="next();"
      </div>
    </div>
  </div>
</div>
</body>
</html>

我要冒险了,因为我还没有通读你的代码。由于评论有点长,试试这个:

function next(){
  nrShown++;
  if(nrShown == nrSlide) {
    nrShown=0; // Instead of nrSlide
  }
  Effect();
}
function prev(){
  nrShown--;
  if(nrShown == -1) {
    nrShown = nrSlide -1; // Instead of nrSlide
  }
  Effect();
}