1

創建圖庫頁面時出現問題。我正在使用Bootstrap作爲基礎,並且很好。我查看了各種滑塊和旋轉木馬,並選擇了Flexslider2 - 它的工作原理非常棒,看起來很棒,並且作爲單個滑塊工作得很好。Bootstrap選項卡中的兩個或多個Flexslider2

但是我現在想要使用4個Flexsliders,每個選項卡上都有一個用於圖庫頁面。好的,我可以有4頁,但它只會在1頁上看起來更好。

我對Javascript很新,但知道html(但不是DOM)。下面我的例子就是爲了簡單而設置2個Flexsliders。

當我的頁面觸發初始Flexslider是好的,但當我切換標籤第二個沒有顯示,沒有錯誤,但當我在屏幕上放置一個警報作爲第二個Flexslider被初始化,然後顯示。這是指向一個DOM問題,但我似乎無法找到解決方案。

HTML;

<div class="row-fluid"> 
<div class="span9"> 
    <section id="tabs"> 
    <div class="bs-docs-example"> 
     <ul class="nav nav-tabs" id="myTab"> 
      <li class="active"><a href="#home">Home</a></li> 
      <li><a href="#profile">Profile</a></li> 
     </ul> 
     <div class="tab-content"> 
      <div class="tab-pane active" id="home"> 
      <p>this is tab1 (0)</p> 
      <section class="slider"> 
       <div id="slider1" class="flexslider"> 
       <ul class="slides"> 
        <li> <img src="assets/gallery/slide1.jpg" /> </li> 
        <li> <img src="assets/gallery/slide2.jpg" /> </li> 
        <li> <img src="assets/gallery/slide3.jpg" /> </li> 
        <li> <img src="assets/gallery/slide4.jpg" /> </li> 
       </ul> 
       </div> 
       <div id="carousel1" class="flexslider"> 
       <ul class="slides"> 
        <li> <img src="assets/gallery/slide1.jpg" /> </li> 
        <li> <img src="assets/gallery/slide2.jpg" /> </li> 
        <li> <img src="assets/gallery/slide3.jpg" /> </li> 
        <li> <img src="assets/gallery/slide4.jpg" /> </li> 
       </ul> 
       </div> 
      </section> 
      </div> 
      <div class="tab-pane" id="profile"> 
      <p>this is tab2 (1)</p> 
      <section class="slider"> 
       <div id="slider2" class="flexslider"> 
       <ul class="slides"> 
        <li> <img src="assets/gallery/slide2.jpg" /> </li> 
        <li> <img src="assets/gallery/slide3.jpg" /> </li> 
        <li> <img src="assets/gallery/slide4.jpg" /> </li> 
        <li> <img src="assets/gallery/slide1.jpg" /> </li> 
       </ul> 
       </div> 
       <div id="carousel2" class="flexslider"> 
       <ul class="slides"> 
        <li> <img src="assets/gallery/slide2.jpg" /> </li> 
        <li> <img src="assets/gallery/slide3.jpg" /> </li> 
        <li> <img src="assets/gallery/slide4.jpg" /> </li> 
        <li> <img src="assets/gallery/slide1.jpg" /> </li> 
       </ul> 
       </div> 
      </section> 
      </div> 
     </div> 
    </div> 
    <hr class="bs-docs-separator"> 
    </section> 
</div> 
</div> 

而javascript是;

<script type="text/javascript"> 
    $('#myTab a').click(function (e) { 
    e.preventDefault(); 
    alert("just about to call initflex"); 
    initflexsliders(); 
    $(this).tab('show'); 
}) 
</script> 

<script type="text/javascript"> 
    $(window).load(function(){ 
     initflexsliders(); 
}); 
</script> 

<script type="text/javascript"> 
function initflexsliders(){ 
      $('#carousel1').flexslider({ 
      animation: "slide", 
      controlNav: false, 
      animationLoop: false, 
      slideshow: false, 
      itemWidth: 100, 
      itemMargin: 5, 
      asNavFor: '#slider1' 
      }); 

      $('#slider1').flexslider({ 
      animation: "slide", 
      controlNav: false, 
      animationLoop: false, 
      slideshow: false, 
      sync: "#carousel1", 
      }); 
      $('#carousel2').flexslider({ 
      animation: "slide", 
      controlNav: false, 
      animationLoop: false, 
      slideshow: false, 
      itemWidth: 100, 
      itemMargin: 5, 
      asNavFor: '#slider2' 
      }); 

      $('#slider2').flexslider({ 
      animation: "slide", 
      controlNav: false, 
      animationLoop: false, 
      slideshow: false, 
      sync: "#carousel2", 
      }); 
     } 
</script> 

有沒有人有任何想法?我期望它是簡單的,但它讓我拉我的頭髮?

回答

0

玩了一下,似乎你不應該在頁面加載時初始化每個滑塊,而應該分別在每個標籤上調用它。

小提琴:http://jsfiddle.net/qSqpD/709/

$('#myTab a:first-child').click(function (e) { 
e.preventDefault(); 
$(this).tab('show'); 
    $('#carousel1').flexslider({ 
     animation: "slide", 
     controlNav: false, 
     animationLoop: false, 
     slideshow: false, 
     itemWidth: 400, 
     itemMargin: 5, 
     asNavFor: '#slider1' 
     }); 
    }); 

希望它可以幫助

+0

嗨uvgrin,非常感謝您的幫助,它似乎工作。那麼當我添加另一個標籤時會發生什麼?我已經創建了一個基於你的jsfiddle,第三個選項卡(無論我選擇它們的順序如何)都需要額外的點擊,但一旦它被加載(啓動它的很棒)。有一些理解,我只是沒有到這裏 - 再次感謝您的時間。這是我的小提琴[鏈接](http:// jsfiddle。net/didsy/76Dkr /) – dids

+0

嗨uvgrin,我與你的解決方案一起工作,並得到它在所有標籤上發射所有Flexsliders,非常感謝你的努力和你的榜樣。我使用了[href =「」]功能來觸發每個功能。 – dids

+0

哦,是的,我錯過了你有更多的選項卡,無論如何,我會建議你一樣的事情。樂意效勞。 – uvgrin

1

我解決過,這個工程上flexslider 2.5

我們趕上事件時標籤已經打開,然後初始化flexslider:

$('a[data-toggle="tab"]').on('shown.bs.tab', function (e) { 
    var selectedTab = $(e.target).attr("href") // activated tab 
    if($(selectedTab + ' .flexslider').length ){ 

     $(window).trigger('resize'); //this should fix for you but you can also try this 


     var carousel_sliders = $(selectedTab + ' .flexslider'); 

     for (var i = 0; i < carousel_sliders.length; i++) { 
      var element = carousel_sliders.eq(i); 
      element.flexslider({ 
       animation: "slide", 
       controlsContainer: $(selectedTab + " .custom-navigation-m .custom-controls-container"), 
       customDirectionNav: $(selectedTab + " .custom-navigation-m a") 
      }); 
     } 



    } 
}); 
0

一個簡單的解決方案是:

在HTML:

<div class="tab-pane" id="videos" align="center"> 

JS:

$('#video').click(function (e) { 
      e.preventDefault(); 
      $('#slider2').flexslider({ 
       animation: "slide", 
       animationLoop: false, 
       slideshow: false, 
       itemMargin: 5, 
       video: true 
      });