代码之家  ›  专栏  ›  技术社区  ›  Bojan Kolano

动态生成的幻灯片放映错误

  •  0
  • Bojan Kolano  · 技术社区  · 7 年前

    我有一个幻灯片,它从JSON获取图像源并生成图像数量的列表。代码如下:

    //Json
      var sidenav = $('.sidenav');
    
      $.getJSON('http://localhost:8080/data.json', function(result){
        for (var i = 0 ; i < result.length ; i++) {
          sidenav.append(`<li class="selected"><img src="${result[i].src}" alt="${result[i].alt}"></li>`);
    
          var slides = $('.sidenav li');
          var slideIndex = 0;
          var slideTime = animate();
    
          slideTo(slides[0]);
    
          slides.click(function() {
          clearInterval(slideTime);
          slideTime = animate();
    
          var selectedIndex = $(this).index();
          var slide = slides[selectedIndex];
          slideTo(slide);
    
          });
        }
    
        function slideTo(slide) {
          slides.removeClass("selected");
          $(slide).addClass("selected");
          slideIndex = jQuery(slide).index();
        }
    
        function animate() {
          return setInterval(function() {
            var slide = slides[slideIndex];
            slideTo(slide)
            slideIndex++;
            if (slideIndex == slides.length) {
              slideIndex = 0;
            }
          },3000);
        }
    
         <div class="slider">
            <ul class="sidenav">
    
            </ul>
          </div>
    

    CSS无处不在,但在这里并不重要。这是因为它获取第一个li项并添加一个类 selected . 但由于某种原因,它跳到最后一个并没有移动。我觉得我错过了一些小而重要的东西。。有什么意见吗?

    1 回复  |  直到 7 年前
        1
  •  0
  •   Bojan Kolano    7 年前

    好的,答案是把幻灯片改变的部分移出for循环。。

    var sidenav = $('.sidenav');
    
      $.getJSON('http://localhost:8080/data.json', function(result){
        for (var i = 0 ; i < result.length ; i++) {
          sidenav.append(`<li class="selected"><img src="${result[i].src}" alt="${result[i].alt}"></li>`);
        }
    
        var slides = $('.sidenav li');
        var slideIndex = 0;
        var slideTime = animate();
    
        slideTo(slides[0]);
    
        slides.click(function() {
          clearInterval(slideTime);
          slideTime = animate();
    
          var selectedIndex = $(this).index();
          var slide = slides[selectedIndex];
          slideTo(slide);
    
          });
    
        function slideTo(slide) {
          slides.removeClass("selected");
          $(slide).addClass("selected");
          slideIndex = jQuery(slide).index();
        }
    
        function animate() {
          return setInterval(function() {
            var slide = slides[slideIndex];
            slideTo(slide)
            slideIndex++;
            if (slideIndex == slides.length) {
              slideIndex = 0;
            }
          },3000);
        }