Trying to make multiple background images cycle through a slideshow with CSS and JQUERY

前端 未结 3 789
-上瘾入骨i
-上瘾入骨i 2020-11-28 16:14

I\'ve placed three background images in a div. I\'m trying to make all three of them cycle through on a timer that fades in and out. I\'ve actually found similar quesitons o

相关标签:
3条回答
  • 2020-11-28 16:47

    Try creating array from css background-image value , fading in , fading out first background image ; removing faded out background image from array , placing removed background image at last index of array ; resetting background image value to array joined by comma; fading in , fading out next , now first indexed background image ; cycling through fading in , fading out all background images ; recursively calling function , to attempt to create displayed effect of an "infinite" fade in , fade out "slideshow"

    $(function() {
      // set `$.fx.interval` at `0`
      $.fx.interval = 0;
      (function cycleBgImage(elem, bgimg) {
    // `elem`:`#slideshow`
    // set, reset, delay to `1000` after background image reset
    elem.css("backgroundImage", bgimg)
      // fade in background image
      .fadeTo(3000, 1, "linear", function() {
        // set `delay` before fadeing out image
        // fade in background image        
        $(this).delay(3000, "fx").fadeTo(3000, 0, "linear", function() {
          // split background image string at comma , creating array
          var img = $(this).css("backgroundImage").split(","),
            // concat first background image to `img` array,
            // remove first background image from `img` array
            bgimg = img.concat(img[0]).splice(1).join(",");
          // recursively call `cycleBgImage`
          cycleBgImage(elem, bgimg);
        });
      });
      }($("#slideshow")));
    });
    body {
      width: 400px;
      height: 400px;
    }
    /* set `#slideshow` parent background color */
    .slideshow {
      background: #000;
      display:block;
      width:inherit;
      height:inherit;
    }
    #slideshow {
      width: 100%;
      height: 100%;
      display: block;
      opacity: 0.0;
      background-color: #000;
      /* 
         set background images as `url(/path/to/image)` here, 
         separated by commas 
      */
      background-image: url("http://lorempixel.com/400/400/cats/?1"), 
        url("http://lorempixel.com/400/400/animals/?2"), 
        url("http://lorempixel.com/400/400/nature/?3"), 
        url("http://lorempixel.com/400/400/technics/?4"), 
        url("http://lorempixel.com/400/400/city/?5");
      background-size: cover, 0px, 0px, 0px;
    /* set transtitions at 3000ms 
      -webkit-transition: background-image 3000ms linear;
      -moz-transition: background-image 3000ms linear;
      -ms-transition: background-image 3000ms linear;
      -o-transition: background-image 3000ms linear;
      transition: background-image 3000ms linear;
        */
    }
    <script src="https://ajax.googleapis.com/ajax/libs/jquery/1.11.1/jquery.min.js">
    </script>
    <div class="slideshow">
      <div id="slideshow"></div>
    </div>

    jsfiddle http://jsfiddle.net/gkjL6mdj/15/

    0 讨论(0)
  • 2020-11-28 16:53

    From the answer here and suggestion from @guest271314 try defining CSS 3 key frames for animation:

    #slideshow{
           position:relative;
           top:0;
           width:100%;
           height:635px;
           background:
           url("car4.jpg"),
           url("city.jpg"),
           url("host3.jpg");
           background-repeat:no-repeat;
           background-size:100%;
           -moz-animation: swim 2s linear 0s infinite;
           -webkit-animation: swim 2s linear 0s infinite;
            animation: swim 2s linear 0s infinite;
    }
    
    
    @-moz-keyframes swim {
        from { background-position: 200% 0, 0 0; }
        to  { background-position: -100% 0, 0 0; }
    }
    @-webkit-keyframes swim {
        from { background-position: 200% 0, 0 0; }
        to  { background-position: -100% 0, 0 0; }
    }
    @keyframes swim {
        from { background-position: 200% 0, 0 0; }
        to  { background-position: -100% 0, 0 0; }
    }
    
    0 讨论(0)
  • 2020-11-28 16:59

    CSS

    #background-slideshow {
        transition: background 1.5s ease; 
        background-position: center top, center top, center top; 
        background-size: cover, cover, cover;
        background-repeat:  no-repeat, no-repeat, no-repeat;
        background-image: url(img/background-1.jpg), url(img/background-2.jpg), url(img/background-3.jpg);
    }
    

    JS

    var i = 1;
    setInterval(function() { 
        e = document.getElementById('background-slideshow');
        switch (i) {
            case 0:
                e.style.backgroundPosition = 'center top, center top, center top';
                break;
            case 1:
                e.style.backgroundPosition = window.innerWidth + 'px top, center top, center top';
                break;
            case 2:
                e.style.backgroundPosition = window.innerWidth + 'px top, ' + window.innerWidth + 'px top, center top';
                break;
        }
        i++;    
        if (i > 2) i = 0;   
    }, 3000);
    
    
    0 讨论(0)
提交回复
热议问题