2015-10-19 47 views
0

我剛創建了一個基於我找到的教程的圖像滑塊。我只是在網上發現了一些快速照片來測試它,但我提出問題的原因是因爲改變圖像所花費的時間差異很大。它會一直持續下去,然後它會開始每隔一兩秒更換一次圖像。我怎樣才能讓我的滑塊有一個一致的幻燈片轉換。圖像滑塊轉換時間

這可能是最好的發佈我的網站,所以你可以看到它在做什麼。

realtorcatch.com

我使用的是插件的JavaScript,因此代碼是聚成一團。有沒有辦法在我自己的代碼中添加相同的基本功能,但質量更好?

jQuery的:

(function (e) { 
var t = function (t, n) { 
    var r = e.extend({}, e.fn.nivoSlider.defaults, n); 
    var i = { 
     currentSlide: 0, 
     currentImage: "", 
     totalSlides: 0, 
     running: false, 
     paused: false, 
     stop: false, 
     controlNavEl: false 
    }; 
    var s = e(t); 
    s.data("nivo:vars", i).addClass("nivoSlider"); 
    var o = s.children(); 
    o.each(function() { 
     var t = e(this); 
     var n = ""; 
     if (!t.is("img")) { 
      if (t.is("a")) { 
       t.addClass("nivo-imageLink"); 
       n = t 
      } 
      t = t.find("img:first") 
     } 
     var r = r === 0 ? t.attr("width") : t.width(), 
      s = s === 0 ? t.attr("height") : t.height(); 
     if (n !== "") { 
      n.css("display", "none") 
     } 
     t.css("display", "none"); 
     i.totalSlides++ 
    }); 
    if (r.randomStart) { 
     r.startSlide = Math.floor(Math.random() * i.totalSlides) 
    } 
    if (r.startSlide > 0) { 
     if (r.startSlide >= i.totalSlides) { 
      r.startSlide = i.totalSlides - 1 
     } 
     i.currentSlide = r.startSlide 
    } 
    if (e(o[i.currentSlide]).is("img")) { 
     i.currentImage = e(o[i.currentSlide]) 
    } else { 
     i.currentImage = e(o[i.currentSlide]).find("img:first") 
    } 
    if (e(o[i.currentSlide]).is("a")) { 
     e(o[i.currentSlide]).css("display", "block") 
    } 
    var u = e("<img/>").addClass("nivo-main-image"); 
    u.attr("src", i.currentImage.attr("src")).show(); 
    s.append(u); 
    e(window).resize(function() { 
     s.children("img").width(s.width()); 
     u.attr("src", i.currentImage.attr("src")); 
     u.stop().height("auto"); 
     e(".nivo-slice").remove(); 
     e(".nivo-box").remove() 
    }); 
    s.append(e('<div class="nivo-caption"></div>')); 
    var a = function (t) { 
     var n = e(".nivo-caption", s); 
     if (i.currentImage.attr("title") != "" && i.currentImage.attr("title") != undefined) { 
      var r = i.currentImage.attr("title"); 
      if (r.substr(0, 1) == "#") r = e(r).html(); 
      if (n.css("display") == "block") { 
       setTimeout(function() { 
        n.html(r) 
       }, t.animSpeed) 
      } else { 
       n.html(r); 
       n.stop().fadeIn(t.animSpeed) 
      } 
     } else { 
      n.stop().fadeOut(t.animSpeed) 
     } 
    }; 
    a(r); 
    var f = 0; 
    if (!r.manualAdvance && o.length > 1) { 
     f = setInterval(function() { 
      d(s, o, r, false) 
     }, r.pauseTime) 
    } 
    if (r.directionNav) { 
     s.append('<div class="nivo-directionNav"><a class="nivo-prevNav">' + r.prevText + '</a><a class="nivo-nextNav">' + r.nextText + "</a></div>"); 
     e(s).on("click", "a.nivo-prevNav", function() { 
      if (i.running) { 
       return false 
      } 
      clearInterval(f); 
      f = ""; 
      i.currentSlide -= 2; 
      d(s, o, r, "prev") 
     }); 
     e(s).on("click", "a.nivo-nextNav", function() { 
      if (i.running) { 
       return false 
      } 
      clearInterval(f); 
      f = ""; 
      d(s, o, r, "next") 
     }) 
    } 
    if (r.controlNav) { 
     i.controlNavEl = e('<div class="nivo-controlNav"></div>'); 
     s.after(i.controlNavEl); 
     for (var l = 0; l < o.length; l++) { 
      if (r.controlNavThumbs) { 
       i.controlNavEl.addClass("nivo-thumbs-enabled"); 
       var c = o.eq(l); 
       if (!c.is("img")) { 
        c = c.find("img:first") 
       } 
       if (c.attr("data-thumb")) i.controlNavEl.append('<a class="nivo-control" rel="' + l + '"><img src="' + c.attr("data-thumb") + '" alt="" /></a>') 
      } else { 
       i.controlNavEl.append('<a class="nivo-control" rel="' + l + '">' + (l + 1) + "</a>") 
      } 
     } 
     e("a:eq(" + i.currentSlide + ")", i.controlNavEl).addClass("active"); 
     e("a", i.controlNavEl).bind("click", function() { 
      if (i.running) return false; 
      if (e(this).hasClass("active")) return false; 
      clearInterval(f); 
      f = ""; 
      u.attr("src", i.currentImage.attr("src")); 
      i.currentSlide = e(this).attr("rel") - 1; 
      d(s, o, r, "control") 
     }) 
    } 
    if (r.pauseOnHover) { 
     s.hover(function() { 
      i.paused = true; 
      clearInterval(f); 
      f = "" 
     }, function() { 
      i.paused = false; 
      if (f === "" && !r.manualAdvance) { 
       f = setInterval(function() { 
        d(s, o, r, false) 
       }, r.pauseTime) 
      } 
     }) 
    } 
    s.bind("nivo:animFinished", function() { 
     u.attr("src", i.currentImage.attr("src")); 
     i.running = false; 
     e(o).each(function() { 
      if (e(this).is("a")) { 
       e(this).css("display", "none") 
      } 
     }); 
     if (e(o[i.currentSlide]).is("a")) { 
      e(o[i.currentSlide]).css("display", "block") 
     } 
     if (f === "" && !i.paused && !r.manualAdvance) { 
      f = setInterval(function() { 
       d(s, o, r, false) 
      }, r.pauseTime) 
     } 
     r.afterChange.call(this) 
    }); 
    var h = function (t, n, r) { 
     if (e(r.currentImage).parent().is("a")) e(r.currentImage).parent().css("display", "block"); 
     e('img[src="' + r.currentImage.attr("src") + '"]', t).not(".nivo-main-image,.nivo-control img").width(t.width()).css("visibility", "hidden").show(); 
     var i = e('img[src="' + r.currentImage.attr("src") + '"]', t).not(".nivo-main-image,.nivo-control img").parent().is("a") ? e('img[src="' + r.currentImage.attr("src") + '"]', t).not(".nivo-main-image,.nivo-control img").parent().height() : e('img[src="' + r.currentImage.attr("src") + '"]', t).not(".nivo-main-image,.nivo-control img").height(); 
     for (var s = 0; s < n.slices; s++) { 
      var o = Math.round(t.width()/n.slices); 
      if (s === n.slices - 1) { 
       t.append(e('<div class="nivo-slice" name="' + s + '"><img src="' + r.currentImage.attr("src") + '" style="position:absolute; width:' + t.width() + "px; height:auto; display:block !important; top:0; left:-" + (o + s * o - o) + 'px;" /></div>').css({ 
        left: o * s + "px", 
        width: t.width() - o * s + "px", 
        height: i + "px", 
        opacity: "0", 
        overflow: "hidden" 
       })) 
      } else { 
       t.append(e('<div class="nivo-slice" name="' + s + '"><img src="' + r.currentImage.attr("src") + '" style="position:absolute; width:' + t.width() + "px; height:auto; display:block !important; top:0; left:-" + (o + s * o - o) + 'px;" /></div>').css({ 
        left: o * s + "px", 
        width: o + "px", 
        height: i + "px", 
        opacity: "0", 
        overflow: "hidden" 
       })) 
      } 
     } 
     e(".nivo-slice", t).height(i); 
     u.stop().animate({ 
      height: e(r.currentImage).height() 
     }, n.animSpeed) 
    }; 
    var p = function (t, n, r) { 
     if (e(r.currentImage).parent().is("a")) e(r.currentImage).parent().css("display", "block"); 
     e('img[src="' + r.currentImage.attr("src") + '"]', t).not(".nivo-main-image,.nivo-control img").width(t.width()).css("visibility", "hidden").show(); 
     var i = Math.round(t.width()/n.boxCols), 
      s = Math.round(e('img[src="' + r.currentImage.attr("src") + '"]', t).not(".nivo-main-image,.nivo-control img").height()/n.boxRows); 
     for (var o = 0; o < n.boxRows; o++) { 
      for (var a = 0; a < n.boxCols; a++) { 
       if (a === n.boxCols - 1) { 
        t.append(e('<div class="nivo-box" name="' + a + '" rel="' + o + '"><img src="' + r.currentImage.attr("src") + '" style="position:absolute; width:' + t.width() + "px; height:auto; display:block; top:-" + s * o + "px; left:-" + i * a + 'px;" /></div>').css({ 
         opacity: 0, 
         left: i * a + "px", 
         top: s * o + "px", 
         width: t.width() - i * a + "px" 
        })); 
        e('.nivo-box[name="' + a + '"]', t).height(e('.nivo-box[name="' + a + '"] img', t).height() + "px") 
       } else { 
        t.append(e('<div class="nivo-box" name="' + a + '" rel="' + o + '"><img src="' + r.currentImage.attr("src") + '" style="position:absolute; width:' + t.width() + "px; height:auto; display:block; top:-" + s * o + "px; left:-" + i * a + 'px;" /></div>').css({ 
         opacity: 0, 
         left: i * a + "px", 
         top: s * o + "px", 
         width: i + "px" 
        })); 
        e('.nivo-box[name="' + a + '"]', t).height(e('.nivo-box[name="' + a + '"] img', t).height() + "px") 
       } 
      } 
     } 
     u.stop().animate({ 
      height: e(r.currentImage).height() 
     }, n.animSpeed) 
    }; 
    var d = function (t, n, r, i) { 
     var s = t.data("nivo:vars"); 
     if (s && s.currentSlide === s.totalSlides - 1) { 
      r.lastSlide.call(this) 
     } 
     if ((!s || s.stop) && !i) { 
      return false 
     } 
     r.beforeChange.call(this); 
     if (!i) { 
      u.attr("src", s.currentImage.attr("src")) 
     } else { 
      if (i === "prev") { 
       u.attr("src", s.currentImage.attr("src")) 
      } 
      if (i === "next") { 
       u.attr("src", s.currentImage.attr("src")) 
      } 
     } 
     s.currentSlide++; 
     if (s.currentSlide === s.totalSlides) { 
      s.currentSlide = 0; 
      r.slideshowEnd.call(this) 
     } 
     if (s.currentSlide < 0) { 
      s.currentSlide = s.totalSlides - 1 
     } 
     if (e(n[s.currentSlide]).is("img")) { 
      s.currentImage = e(n[s.currentSlide]) 
     } else { 
      s.currentImage = e(n[s.currentSlide]).find("img:first") 
     } 
     if (r.controlNav) { 
      e("a", s.controlNavEl).removeClass("active"); 
      e("a:eq(" + s.currentSlide + ")", s.controlNavEl).addClass("active") 
     } 
     a(r); 
     e(".nivo-slice", t).remove(); 
     e(".nivo-box", t).remove(); 
     var o = r.effect, 
      f = ""; 
     if (r.effect === "random") { 
      f = new Array("sliceDownRight", "sliceDownLeft", "sliceUpRight", "sliceUpLeft", "sliceUpDown", "sliceUpDownLeft", "fold", "fade", "boxRandom", "boxRain", "boxRainReverse", "boxRainGrow", "boxRainGrowReverse"); 
      o = f[Math.floor(Math.random() * (f.length + 1))]; 
      if (o === undefined) { 
       o = "fade" 
      } 
     } 
     if (r.effect.indexOf(",") !== -1) { 
      f = r.effect.split(","); 
      o = f[Math.floor(Math.random() * f.length)]; 
      if (o === undefined) { 
       o = "fade" 
      } 
     } 
     if (s.currentImage.attr("data-transition")) { 
      o = s.currentImage.attr("data-transition") 
     } 
     s.running = true; 
     var l = 0, 
      c = 0, 
      d = "", 
      m = "", 
      g = "", 
      y = ""; 
     if (o === "sliceDown" || o === "sliceDownRight" || o === "sliceDownLeft") { 
      h(t, r, s); 
      l = 0; 
      c = 0; 
      d = e(".nivo-slice", t); 
      if (o === "sliceDownLeft") { 
       d = e(".nivo-slice", t)._reverse() 
      } 
      d.each(function() { 
       var n = e(this); 
       n.css({ 
        top: "0px" 
       }); 
       if (c === r.slices - 1) { 
        setTimeout(function() { 
         n.animate({ 
          opacity: "1.0" 
         }, r.animSpeed, "", function() { 
          t.trigger("nivo:animFinished") 
         }) 
        }, 100 + l) 
       } else { 
        setTimeout(function() { 
         n.animate({ 
          opacity: "1.0" 
         }, r.animSpeed) 
        }, 100 + l) 
       } 
       l += 50; 
       c++ 
      }) 
     } else if (o === "sliceUp" || o === "sliceUpRight" || o === "sliceUpLeft") { 
      h(t, r, s); 
      l = 0; 
      c = 0; 
      d = e(".nivo-slice", t); 
      if (o === "sliceUpLeft") { 
       d = e(".nivo-slice", t)._reverse() 
      } 
      d.each(function() { 
       var n = e(this); 
       n.css({ 
        bottom: "0px" 
       }); 
       if (c === r.slices - 1) { 
        setTimeout(function() { 
         n.animate({ 
          opacity: "1.0" 
         }, r.animSpeed, "", function() { 
          t.trigger("nivo:animFinished") 
         }) 
        }, 100 + l) 
       } else { 
        setTimeout(function() { 
         n.animate({ 
          opacity: "1.0" 
         }, r.animSpeed) 
        }, 100 + l) 
       } 
       l += 50; 
       c++ 
      }) 
     } else if (o === "sliceUpDown" || o === "sliceUpDownRight" || o === "sliceUpDownLeft") { 
      h(t, r, s); 
      l = 0; 
      c = 0; 
      var b = 0; 
      d = e(".nivo-slice", t); 
      if (o === "sliceUpDownLeft") { 
       d = e(".nivo-slice", t)._reverse() 
      } 
      d.each(function() { 
       var n = e(this); 
       if (c === 0) { 
        n.css("top", "0px"); 
        c++ 
       } else { 
        n.css("bottom", "0px"); 
        c = 0 
       } 
       if (b === r.slices - 1) { 
        setTimeout(function() { 
         n.animate({ 
          opacity: "1.0" 
         }, r.animSpeed, "", function() { 
          t.trigger("nivo:animFinished") 
         }) 
        }, 100 + l) 
       } else { 
        setTimeout(function() { 
         n.animate({ 
          opacity: "1.0" 
         }, r.animSpeed) 
        }, 100 + l) 
       } 
       l += 50; 
       b++ 
      }) 
     } else if (o === "fold") { 
      h(t, r, s); 
      l = 0; 
      c = 0; 
      e(".nivo-slice", t).each(function() { 
       var n = e(this); 
       var i = n.width(); 
       n.css({ 
        top: "0px", 
        width: "0px" 
       }); 
       if (c === r.slices - 1) { 
        setTimeout(function() { 
         n.animate({ 
          width: i, 
          opacity: "1.0" 
         }, r.animSpeed, "", function() { 
          t.trigger("nivo:animFinished") 
         }) 
        }, 100 + l) 
       } else { 
        setTimeout(function() { 
         n.animate({ 
          width: i, 
          opacity: "1.0" 
         }, r.animSpeed) 
        }, 100 + l) 
       } 
       l += 50; 
       c++ 
      }) 
     } else if (o === "fade") { 
      h(t, r, s); 
      m = e(".nivo-slice:first", t); 
      m.css({ 
       width: t.width() + "px" 
      }); 
      m.animate({ 
       opacity: "1.0" 
      }, r.animSpeed * 2, "", function() { 
       t.trigger("nivo:animFinished") 
      }) 
     } else if (o === "slideInRight") { 
      h(t, r, s); 
      m = e(".nivo-slice:first", t); 
      m.css({ 
       width: "0px", 
       opacity: "1" 
      }); 
      m.animate({ 
       width: t.width() + "px" 
      }, r.animSpeed * 2, "", function() { 
       t.trigger("nivo:animFinished") 
      }) 
     } else if (o === "slideInLeft") { 
      h(t, r, s); 
      m = e(".nivo-slice:first", t); 
      m.css({ 
       width: "0px", 
       opacity: "1", 
       left: "", 
       right: "0px" 
      }); 
      m.animate({ 
       width: t.width() + "px" 
      }, r.animSpeed * 2, "", function() { 
       m.css({ 
        left: "0px", 
        right: "" 
       }); 
       t.trigger("nivo:animFinished") 
      }) 
     } else if (o === "boxRandom") { 
      p(t, r, s); 
      g = r.boxCols * r.boxRows; 
      c = 0; 
      l = 0; 
      y = v(e(".nivo-box", t)); 
      y.each(function() { 
       var n = e(this); 
       if (c === g - 1) { 
        setTimeout(function() { 
         n.animate({ 
          opacity: "1" 
         }, r.animSpeed, "", function() { 
          t.trigger("nivo:animFinished") 
         }) 
        }, 100 + l) 
       } else { 
        setTimeout(function() { 
         n.animate({ 
          opacity: "1" 
         }, r.animSpeed) 
        }, 100 + l) 
       } 
       l += 20; 
       c++ 
      }) 
     } else if (o === "boxRain" || o === "boxRainReverse" || o === "boxRainGrow" || o === "boxRainGrowReverse") { 
      p(t, r, s); 
      g = r.boxCols * r.boxRows; 
      c = 0; 
      l = 0; 
      var w = 0; 
      var E = 0; 
      var S = []; 
      S[w] = []; 
      y = e(".nivo-box", t); 
      if (o === "boxRainReverse" || o === "boxRainGrowReverse") { 
       y = e(".nivo-box", t)._reverse() 
      } 
      y.each(function() { 
       S[w][E] = e(this); 
       E++; 
       if (E === r.boxCols) { 
        w++; 
        E = 0; 
        S[w] = [] 
       } 
      }); 
      for (var x = 0; x < r.boxCols * 2; x++) { 
       var T = x; 
       for (var N = 0; N < r.boxRows; N++) { 
        if (T >= 0 && T < r.boxCols) { 
         (function (n, i, s, u, a) { 
          var f = e(S[n][i]); 
          var l = f.width(); 
          var c = f.height(); 
          if (o === "boxRainGrow" || o === "boxRainGrowReverse") { 
           f.width(0).height(0) 
          } 
          if (u === a - 1) { 
           setTimeout(function() { 
            f.animate({ 
             opacity: "1", 
             width: l, 
             height: c 
            }, r.animSpeed/1.3, "", function() { 
             t.trigger("nivo:animFinished") 
            }) 
           }, 100 + s) 
          } else { 
           setTimeout(function() { 
            f.animate({ 
             opacity: "1", 
             width: l, 
             height: c 
            }, r.animSpeed/1.3) 
           }, 100 + s) 
          } 
         })(N, T, l, c, g); 
         c++ 
        } 
        T-- 
       } 
       l += 100 
      } 
     } 
    }; 
    var v = function (e) { 
     for (var t, n, r = e.length; r; t = parseInt(Math.random() * r, 10), n = e[--r], e[r] = e[t], e[t] = n); 
     return e 
    }; 
    var m = function (e) { 
     if (this.console && typeof console.log !== "undefined") { 
      console.log(e) 
     } 
    }; 
    this.stop = function() { 
     if (!e(t).data("nivo:vars").stop) { 
      e(t).data("nivo:vars").stop = true; 
      m("Stop Slider") 
     } 
    }; 
    this.start = function() { 
     if (e(t).data("nivo:vars").stop) { 
      e(t).data("nivo:vars").stop = false; 
      m("Start Slider") 
     } 
    }; 
    r.afterLoad.call(this); 
    return this 
}; 
e.fn.nivoSlider = function (n) { 
    return this.each(function (r, i) { 
     var s = e(this); 
     if (s.data("nivoslider")) { 
      return s.data("nivoslider") 
     } 
     var o = new t(this, n); 
     s.data("nivoslider", o) 
    }) 
}; 
e.fn.nivoSlider.defaults = { 
    effect: "random", 
    slices: 15, 
    boxCols: 8, 
    boxRows: 4, 
    animSpeed: 500, 
    pauseTime: 3e3, 
    startSlide: 0, 
    directionNav: true, 
    controlNav: true, 
    controlNavThumbs: false, 
    pauseOnHover: true, 
    manualAdvance: false, 
    prevText: "Prev", 
    nextText: "Next", 
    randomStart: false, 
    beforeChange: function() {}, 
    afterChange: function() {}, 
    slideshowEnd: function() {}, 
    lastSlide: function() {}, 
    afterLoad: function() {} 
}; 
e.fn._reverse = [].reverse 
})(jQuery) 
+0

可能與未預加載的圖像有關。在JS中將圖像定義爲'img'對象而不僅僅是路徑,它們應該預加載。而且,當你提供你的代碼時,它對我們來說更容易。 – Wobbles

+0

你使用什麼插件?你嘗試過哪些代碼(在這裏發佈)。插件是否有文檔和非版本?如果它有文件,你有引用它們嗎? –

+0

該插件是:jQuery Nivo Slider v3.2 * http://nivo.dev7studios.com ....我複製了代碼,並將自己的文件包括到了頁面中。我完全按照教程所示進行,併爲我的圖像製作路徑。 – Becky

回答

0

事情是這樣的:

r.startSlide = Math.floor(的Math.random()* i.totalSlides)

是這裏的問題,它已經故意編程了。

有很多簡單的滑塊,即使只有CSS。

我有一個完全響應,讓我知道如果你想要的。

+0

我很想看到它。 – Becky

0

@Becky 好吧,我會解釋最重要的事情。 在HTML中使用img標籤,這樣很容易延遲加載或延遲加載圖片。
在CSS中,第一件事是關鍵幀,如果你想讓圖片以不同的方式滑動,請告訴我,我可以改變它。 這個例子將適用於所有設備,並且是完全響應式的,一些非常老的手機只會從左向右滑動史詩,即不支持轉換的手機,但它仍然可以工作,您需要一些額外的前綴,如果你喜歡,我可以添加它們。
第23行我將整個東西包裝爲flexbox。 第41行我們只是聲明圖元素的寬度(你也可以在這裏使用div,它並不重要),寬度是800%,因爲我們在這個slider中有8個圖片。如果它是5張圖片,我們會說寬度是500%等 我們拿出保證金,填充等,左邊的IMG浮動只是爲了避免在IE中的一些不一致。 這個滑塊可以做的是,當我們改變邊距時,它將圖片推向左邊,在關鍵幀中看到,我們將它向左推100%用於下一張圖片,200%用於之後的圖片等。
We聲明圖元素中的img寬度爲12.5%(100%/ 8圖片= 12.5%),如果我們有5張圖片,則img寬度爲20%等。 最後,滑塊div被定義,您可以更改邊框在這裏,或者箱子陰影和背景顏色,所以當圖片沒有填寫框架時,你可以選擇背景顏色,我已經在這裏設置爲透明。
對於此滑塊,隱藏溢出是強制性的,寬度設置爲80%或最大值爲500pix,以先發生者爲準。

<div class="superslide"><div id="slider"> 
<figure> 
<img src="http://generalunion.org/Joomla/images/holidays.jpg" 
width=350  height=350> 

http://codepen.io/damianocel/pen/OyzaZB

就是它,沒有JS,重量很輕,反應靈敏,操作上的所有設備。 你可以使用它作爲完整的backkground滑塊等,只要確保圖片都是相同的大小。

要更改動畫的速度,只需轉到第49和第50行以更改時間參數(此處爲28秒)。