代码之家  ›  专栏  ›  技术社区  ›  ajq88

使用jquery在幻灯片中淡化()图像

  •  1
  • ajq88  · 技术社区  · 10 年前

    我正在制作图像幻灯片 fadeOut() 每个图像都会发生变化,但下一个图像会突然出现。我想让它慢慢消失。我似乎无法让它发挥作用。

    这是没有任何代码的代码 fadeIn() :

    HTML格式:

    <div id="backgroundChanger">
      <img class="active" src="background1.jpg"/>
      <img src="background2.jpg"/>  
      <img src="background3.jpg"/>  
    

    CSS:

    #backgroundChanger{
     position:relative;
    }
    #backgroundChanger img{
     position:absolute;
     z-index:-3
    }
    #backgroundChanger img.active{
     z-index:-1;
    }
    

    Java脚本:

    function cycleImages(){
          var $active = $('#backgroundChanger .active');
          var $next = ($active.next().length > 0) ? $active.next() : $('#backgroundChanger img:first');
          $next.css('z-index',-2);
          $active.fadeOut(1500,function(){
          $active.css('z-index',-3).show().removeClass('active');
              $next.css('z-index',-1).addClass('active');
          });
        }
    
    $(document).ready(function(){
     setInterval('cycleImages()', 7000);
    })
    
    2 回复  |  直到 10 年前
        1
  •  0
  •   nickell    10 年前

    我建议您使用如下间隔函数:

    window.setInterval(function (){
      var images = $('#backgroundChanger img');
      var active, next;
    
      images.each(function(index, img) {
        if($(img).hasClass('active')) {
          active = index;
          next = (index === images.length - 1) ? 0 : index + 1;
        }
      });
    
      $(images[active]).fadeOut(1000, function() {
        $(images[next]).fadeIn(1000);
      });
    
      $(images[next]).addClass('active');
      $(images[active]).removeClass('active');
    }, 3000);
    

    这就是你需要的所有css:

    #backgroundChanger img:first-child {
      display: block;
    }
    
    #backgroundChanger img {
      display: none;
    }
    

    并且保持相同的HTML,您应该可以继续!

        2
  •  0
  •   T J    10 年前

    你可以 fadeIn() 的回调中的下一个图像 fadeOut() 如下所示:

    $(window).load(function() {
      var $slider = $("#backgroundChanger"),
        $slides = $slider.find("img"),
        $firstSlide = $slides.first();
    
      function cycleImages() {
        var $active = $('#backgroundChanger .active'),
          $next = ($active.next().length > 0) ? $active.next() : $firstSlide;
        $active.fadeOut(1000, function() {
          $active.removeClass('active');
          $next.fadeIn(1000).addClass('active');
        });
      }
    
      setInterval(cycleImages, 3000);
    })
    #backgroundChanger img {
      position: absolute;
      width: 150px;
      height: 100px;
    }
    <script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
    <div id="backgroundChanger">
      <img class="active" src="http://i46.tinypic.com/2epim8j.jpg" />
      <img src="http://i49.tinypic.com/28vepvr.jpg" />
      <img src="http://i50.tinypic.com/f0ud01.jpg" />
    </div>

    笔记:

    • 既然我们处理的是图像 load() 处理程序比 ready() 确保加载图像后幻灯片放映开始
    • 通过缓存频繁访问的元素,可以稍微提高性能
    • 你不必玩 z-index 因为两者都是 fadeIn() 淡出() 更改元素的显示属性本身