2012-08-05 173 views
14

我爲構建在Twitter Bootstrap上的WordPress做出了響應式主題。我在主頁上使用了FlexSlider幻燈片jquery插件。FlexSlider 2調整窗口大小調整大小

不幸的是,當我調整瀏覽器的大小時,FlexSlider不能正常調整大小。當我變窄時,圖像很容易被剪掉。如果我走得更寬一些,下一張圖像的一部分會出現在側面。即使使用FlexSlider網站的演示代碼,也會發生這種情況。它甚至發生在FlexSlider演示中。但是Dany Duchaine的[Energized theme] [3]設法在視口變化時很好地調整FlexSlider的大小。任何人都可以解釋他是如何做的,或者建議我可以改進我的版本的行爲?

謝謝!

+0

我們需要一些代碼或例子來看看怎麼了。我現在有一個問題,現在將FlexSlider集成到Drupal 7的Twitter Bootstrap主題中。我的圖像被調整爲一個奇怪的比例,比如它佔據了全部寬度,但高度沒有相應調整。對任何提示感興趣。仍然試圖在我身邊... – MrUpsidown 2012-11-22 11:02:31

回答

14

你可能有一個解決方案或已經在這個階段繼續前進,但我想我會指出這個問題在github訪問者:https://github.com/woothemes/FlexSlider/issues/391(note patbouche的答案)。這個解決方案爲我工作。我把它放在after:的回調中。

var slider1 = $('#slider1').data('flexslider'); 
slider1.resize(); 
+0

感謝byronyasgur,我最終放棄了,但這個解決方案看起來像它會提供一個有效的解決方法。 – 2013-02-16 17:12:59

+0

我想我有完全相同的問題。我會在哪裏將你的答案放在我的代碼中? $( 'flexslider。 ')flexslider({ 選擇:' .slides> .testimonials塊', 動畫: 「滑動」, directionNav:假, smoothHeight:真, })。 謝謝! – Tiago 2015-06-06 18:37:31

+0

我不知道我很久沒有使用過這個了 - 我想在你的評論中的代碼很可能。 – byronyasgur 2015-06-08 13:06:51

2

我覺得這是更好地把它放到以前回調:

$('.flexslider').flexslider({ 
    // your settings 
    before: function(slider){ 
     $('.flexslider').resize(); 
    } 
}); 
+0

你爲什麼要這樣做呢? – byronyasgur 2013-02-18 13:28:11

+0

因爲**之前的**回調在圖像出現之前被調用,所以這樣可以避免看到調整大小的效果。在我看來,修改以前的東西是最好的做法 – Guern 2013-02-18 13:45:35

+0

它會調用每一個動畫。 – 2014-12-04 14:21:25

3

我不得不綁定窗口,以得到這個工作可靠地調整大小事件。 由於FlexSlider 之前之後回調並沒有爲我工作:

$(window).bind('resize', function() { 

setTimeout(function(){ 
    var slider = $('#banner').data('flexslider'); 
    slider.resize(); 
}, 1000); 

}); 
+0

謝謝Natacha! – 2013-07-25 10:05:17

+1

在最新的flexslider中,我使用了這種方法,它掛起瀏覽器。 window.resize是遞歸觸發的。可能是'slider.resize()'調整觸發'window.resize()'的窗口的大小,並且它被捕獲到循環中。 – user31782 2016-12-31 13:30:38

+0

@ user31782是的,這導致另一個插件重新啓動,當它在'window.resize()',這是對我現在的問題,我希望我會找到解決方案 – Stefan 2017-03-03 11:31:12

1

我試過很多方法,那麼我這樣做

if(jQuery('.iframe').length){ 
    var interval = window.setInterval(function() { jQuery('.flexslider').resize(); }, 100); 

    window.setTimeout(function(){ 
     clearInterval(interval); 
    },4000); 
} 
4

我聯合幾個這樣的解決方案,也添加一個檢查以確保滑塊首先存在於頁面上。

$(function() { 
    var resizeEnd; 
    $(window).on('resize', function() { 
     clearTimeout(resizeEnd); 
     resizeEnd = setTimeout(function() { 
      flexsliderResize(); 
     }, 250); 
    }); 
}); 

function flexsliderResize(){ 
    if ($('.flexslider').length > 0) { 
     $('.flexslider').data('flexslider').resize(); 
    } 
} 
1

只是想萬一有人添加另一種替代方案是仍遇到「flexslider調整大小以更高的寬度,但不會降低」問題

用戶「PCandtheWeb」建議增加以下的情況下,你有一個包裹臺上,這似乎把工作做好

.your-table 
{ 
    table-layout: fixed 
} 

來源: https://github.com/woothemes/FlexSlider/issues/980

+0

這裏的問題有點不同。是否會更好地創建一個新的SO問題並在那裏提供答案(除了將它留在這裏,儘管鏈接它會很好)? 這絕對應該是被接受的答案,**如果問題是它不會縮小尺寸**。 – LittleTiger 2016-09-26 05:35:00

0
$(window).load(function(){ 
    var mainslider; 

    $('.flexslider').flexslider({ 
     animation: "slide", 
     start: function(slider){ 
      mainslider = slider; 
     } 
    }); 

    //force resize (carousel mode) 
    $(window).on("resize", function() { 
     //carousel resize code, around line 569 of query.flexslider.js 
     mainslider.update(mainslider.pagingCount); 
     mainslider.newSlides.width(mainslider.computedW); 
     mainslider.setProps(mainslider.computedW, "setTotal"); 
    }); 
}); 

我不確定這一個將適用於所有情況,但對於簡單的傳送帶這個作品!

0

我也嘗試了很多方法,但沒有任何地方真的在工作......然後我手動完成,現在它可以工作:當窗口調整大小時,通過flexslider更改之前保存滑塊數據:銷燬flexslider(https://stackoverflow.com/a/16334046/7334422)和完全刪除節點,手動添加保存在數據中的原始滑塊節點,再次添加並初始化flexslider ...因爲這非常昂貴我還添加了調整大小的方法(https://stackoverflow.com/a/40534918/7334422),以便在調整大小時不會執行...是的,它是一些代碼,這是一個有點哈克,但它的工作:)

$.fn.resized = function (callback, timeout) { 
    $(this).resize(function() { 
     var $this = $(this); 
     if ($this.data('resizeTimeout')) { 
      clearTimeout($this.data('resizeTimeout')); 
     } 
     $this.data('resizeTimeout', setTimeout(callback, timeout)); 
    }); 
}; 

function myFlexInit(slider){ 
    slider.data("originalslider", slider.parent().html()); 
    slider.flexslider({ 
     animation: "slide", 
     //... your options here 
    }); 
} 

$(".flexslider").each(function() { 
    myFlexInit($(this)); 
    }); 

    $(window).resized(function(){ 
     $(".flexslider").each(function() { 
      $(this).removeData("flexslider"); 
      parent = $(this).parent(); 
      originalslider = $(this).data("originalslider"); 
      $(this).remove(); 
      parent.append(originalslider); 
      newslider = parent.children().first(); 
      myFlexInit(newslider); 
     }); 
    }, 200); 

你最好換你滑塊以自己獨特的容器:

<div class="sliderparent"> 
    <div class="flexslider"> 
     <ul class="slides"> 

     </ul> 
     </div> 
</div>