2012-09-10 83 views
15

我試圖通過延遲加載jQuery插件,並按照本網站上的說明進行操作以延遲加載Flexslider工作:http://www.appelsiini.net/projects/lazyload延遲加載在Flexslider

我加載插件腳本,並沒有看到任何錯誤安慰。我嘗試沒有在lazyload函數中傳遞容器或選項,仍然沒有。我花了幾個小時。

$("img.lazy").lazyload({ 
    effect: "fadeIn", 
    container: $(".slides > li") 
}); 

有誰知道如何獲得在Flexslider懶惰加載工作?

回答

0

所以我加入了真實圖像頁面的數據ATTR屬性上的圖像標籤和after事件火我會active類找出圖像,並設置IMG SRC屬性等於數據ATTR值。

+6

你有一個例子嗎?或者你可以在js小提琴中扔一個嗎? –

+0

正如@ J0NNYZER0所說,你能不能解決你的問題?謝謝。 – cavill

4

我正在嘗試使用Flexslider 2Lazy Load Plugin for jQuery來做同樣的事情。

看來container財產只有在元素與overflow:scroll;

我能得到延遲加載使用此代碼的工作風格的作品:

$("#flexcontainer img.lazy").lazyload({ 
    failure_limit : 10, 
    effect: "fadeIn", 
    skip_invisible : false 
}); 

然而,這只是懶惰的負載一切而不是像柔性滑板動畫一樣。

我也能得到它的鼠標工作在使用此代碼:

$("#flexcontainer img.lazy").lazyload({ 
    failure_limit : 10, 
    effect: "fadeIn", 
    event : "mouseover" 
}); 

然而,這並不在觸摸設備上工作。

我認爲關鍵是要創建自己的自定義事件,並讓它在flexslider回調(如after回調)後觸發。

+0

感謝您的回答,但是這就是我所做的。我實現了我的懶惰加載邏輯,它基於懶惰加載庫在幻燈片完成後觸發的flexslider事件後執行的操作。 –

+0

由於加載所有圖像,您的延遲加載解決方案對大圖像集合沒有任何意義。我提出了更好的解決方案。 –

7

該方法對我來說效果不錯,但加載圖像的大小必須與其餘圖像的大小相同。實際上我用http://imageresizing.net/與模式=墊

在您正在使用的flexslider主容器,把實際的圖像中的「數據-src」屬性

<li> 
    <img class="lazy" src="loading-image.jpg" data-src="actual-image.jpg" /> 
</li>    

在你的初始化函數,使用「開始「回調以取代實際圖像的加載圖像,並刪除屬性

$('#slider').flexslider({ 
    start: function (slider) { 
     // lazy load 
     $(slider).find("img.lazy").each(function() { 
      var src = $(this).attr("data-src"); 
      $(this).attr("src", src).removeAttr("data-src"); 
     }); 
    } 
}); 

我希望這可以幫助某人。

+2

它適用於我,我只做了一個改進,而不是直接添加class =「lazy」,我用屬性「data-src」$(slider).find(「img [data-src]」)搜索img。 (函數()... –

1

你還不如初始化一個自定義觸發事件lazyload ...

$jQ("img[data-original]").lazyload({ 
      effect: "fadeIn", 
      skip_invisible: false, 
      event: "forceLazyLoad" 
     }); 

...然後調用此事件預加載flexslider內所有的圖像中包含的電話:

$jQ('.flex-viewport').find('img[data-original]').trigger('forceLazyLoad'); 
11

我在滾動過程中實現了延遲加載。與此處提出的其他解決方案相比,此解決方案適用於大型集合。在初始化期間,它只加載前5個圖像,然後爲每個動畫加載3個圖像。

<li> 
    <img class="lazy" src="loading-image.jpg" data-src="actual-image.jpg" /> 
</li> 

和JavaScript代碼:

$('.flexslider').flexslider({ 
     animation: "slide", 
     animationLoop: false, 
     controlNav: false, 
     init: function (slider) { 
      // lazy load 
      $("img.lazy").slice(0,5).each(function() { 
       var src = $(this).attr("data-src"); 
       $(this).attr("src", src).removeAttr("data-src").removeClass("lazy"); 
      }); 
     }, 
     before: function (slider) { 
      // lazy load 
      $("img.lazy").slice(0,3).each(function() { 
       var src = $(this).attr("data-src"); 
       $(this).attr("src", src).removeAttr("data-src").removeClass("lazy"); 
      }); 
     } 
    }); 
+1

你可以發送一個JSFiddle或者這個兄弟的Codepen嗎? –

+0

@RomanPodlinov我如何使用這個概念來響應滑塊? – Vikram

+0

@Vikram抱歉,我沒有與ResponsiveSlider一起工作,但IMO的概念也必須工作,你只需要綁定滑塊上事件的lazyload –