【问题标题】:Image Slider Javascript won't work图像滑块 Javascript 不起作用
【发布时间】:2018-09-22 06:48:31
【问题描述】:

我目前正在为我公司的新主页制作图像滑块,但无法弄清楚似乎存在于 javascript 部分中的错误.. 滑块包含 4 张图像,一旦到达最后一张图像,就应该再次从第一张图像开始。问题是图像按“1-2-1-2-3-4-1-2-3-4...”的顺序显示

代码如下:

  $('.slide').first().addClass('active');

  $('.slide').hide();

  $('.active').show();

  $('#next').on('click', nextSlide);

  $('#prev').on('click', prevSlide);

  // Auto slider
  if (options.autoswitch === true) {
    setInterval(nextSlide, options.autoswitch_speed);
  }

  function nextSlide() {
    $('.active').removeClass('active').addClass('prevActive');    

    if ($('.prevActive').is(':last-child')) {   
      $('.slide').first().addClass('active');
    } else {                   
      $('.prevActive').next().addClass('active');
    }   

    $('.prevActive').removeClass('prevActive');   
    $('.slide').fadeOut(options.speed);        
    $('.active').fadeIn(options.speed);       
  }

  function prevSlide() {
    $('.active').removeClass('active').addClass('prevActive');    

    if ($('.prevActive').is(':first-child')) {    
      $('.slide').last().addClass('active');
    } else {                    
      $('.prevActive').prev().addClass('active');
    }

    $('.prevActive').removeClass('prevActive');   
    $('.slide').fadeOut(options.speed);       
    $('.active').fadeIn(options.speed);           
  }

});

以及对应的CSS:

#slider-container {
  height: 600px;
  margin: 0 auto;
  max-width: 100%;
  overflow: hidden;
  position: relative;
  width: 800px;
}

#sldier {
  height: 100%;
  width: 100%;
}

#slider .slide img {
  height: 100%;
  width: auto;
}

#prev, #next {
  cursor: pointer;
  max-width: 30px;
  opacity: 1;
  position: absolute;
  top: 8%;
  -webkit-transition: opacity 0.2s linear;
  -moz-transition: opacity 0.2s linear;
  -o-transition: opacity 0.2s linear;
  transition: opacity 0.2s linear;
  z-index: 999;
}

#prev { left: 12px; }

#next { right: 3px; }

#slider-container:hover #prev, #slider-container:hover #next { opacity: .7; }

.slide {
  position: absolute;
  width: 100%;
}

.slide-copy {
  background: #777;
  background: rgba(0, 0, 0, .5);
  bottom: 0;
  color: #fff;
  left: 0;
  padding: 20px;
  position: absolute;
}   

@media (min-width: 600px) {
    #prev, #next {
        top: 45%;
    }
    }

和 HTML

<div id="slider-container">
  <img src="img/arrowprev" id="prev" alt="prev">
  <ul id="slider">
    <li class="slide">
      <div class="slide-copy">
        <h2>Placeholder</h2>
        <p>Lorem ipsum dolor sit amet, consetetur sadipscing elitr, sed diam nonumy eirmod tempor invidunt ut labore et dolore magna aliquyam erat.</p>
      </div>
      <img src="img/placeholder" alt="placeholder">
    </li>
    <li class="slide">
      <div class="slide-copy">
        <h2>Placeholder2</h2>
        <p>Lorem ipsum dolor sit amet, consetetur sadipscing elitr, sed diam nonumy eirmod tempor invidunt ut labore et dolore magna aliquyam erat.</p>
      </div>
      <img src="img/placeholder" alt="placeholder">
    </li>
    <li class="slide">
      <div class="slide-copy">
        <h2>Placeholder3</h2>
        <p>Lorem ipsum dolor sit amet, consetetur sadipscing elitr, sed diam nonumy eirmod tempor invidunt ut labore et dolore magna aliquyam erat.</p>
      </div>
      <img src="img/placeholder" alt="placeholder">
    </li>
        <li class="slide">
      <div class="slide-copy">
        <h2>Placeholder4</h2>
        <p>Lorem ipsum dolor sit amet, consetetur sadipscing elitr, sed diam nonumy eirmod tempor invidunt ut labore et dolore magna aliquyam erat.</p>
      </div>
      <img src="img/placeholder" alt="placeholder">
    </li>
  </ul>
  <img src="img/arrownext" id="next" alt="next">     
</div>

可能跟这个有关

if ($('.prevActive').is(':first-child')) {    
      $('.slide').last().addClass('active');

我只是无法找出问题所在,希望能提供任何帮助。 提前谢谢你:)

这是我作为来源的页面: https://www.jqueryscript.net/slider/Tiny-jQuery-Image-Slider-Slideshow-With-Caption-Support.html

【问题讨论】:

  • 嗨!如果您不附加 HTML,则很难弄清楚发生了什么
  • 当然抱歉,我刚刚编辑了它

标签: javascript image slider


【解决方案1】:

我发现了失败,它不起作用的独特之处在于,在每个下一个/上一个操作上应用了每个 prevActiveactive 元素的可见性,所以我在这两个函数中都添加了这行代码:

$('.prevActive').hide();
$('.active').show();

(我还注释了引用选项变量的行,如描述中未定义的那样)。

你可以看到小提琴在这里工作: https://jsfiddle.net/a4bssrf5/8/

【讨论】:

  • 嗯,我看到它适用于您的小提琴,但不知何故它对我不起作用.. 可能与 WordPress 有关吗?还是我错过了对 HTML/CSS 的任何更改?
  • 我不知道.. 但是是的,WordPress 总是可以让事情变得更复杂。你在浏览器控制台打印了什么错误?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-03-11
  • 2014-08-13
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多