2012-10-04 50 views
2

我有一個滑塊的問題。當我第一次加載我的網頁時,它會顯示帶有一些圖像的滑塊。我有一些鏈接來改變圖像顯示,所以當我點擊時,我想顯示爲其他的滑塊。問題是,當我點擊新鏈接時,它不使用jquery函數來格式化滑塊。如何重新加載JavaScript但不是頁面

這裏我粘貼一些代碼,這樣你可以計算出:

<div class="contenidor_escaparates_2011"> 
    <div id="contenidor_slider" class="containerGaleria"> 
     <ul id="slideshow"> 
       <li><img src="img/Escaparates_2011/img1.jpg" alt="Dormitorio azul turquesa." /></li> 
       <li><img src="img/Escaparates_2011/img2.jpg" alt="Escaparate Agosto 2011." /></li> 
       <li><img src="img/Escaparates_2011/img3.jpg" alt="Escaparate Enero 2011." /></li> 
</ul> </div></div> 

然後jQuery的:

$(document).ready(function() 
{ 
    var timeout, manualMode = false, 

      $slideshow = $('#slideshow'), 
    $items = $slideshow.find('li').hide(), 
    total = $items.length, 
    getItem = function($item, trav) { 
     var $returnItem = $item[trav](); 
     return $returnItem.length ? 
      $returnItem : 
      $items[(trav == 'next') ? 'first' : 'last'](); 
    }, 

    showItem = function($currentItem, $itemToShow) { 
     var $itemToShow = 
      $itemToShow || getItem($currentItem,'next'); 

     $currentItem.fadeOut(300, function() { 
      $itemToShow.fadeIn(300, fadeCallback); 
     }); 
    }, 

    fadeCallback = function() { 
     if (manualMode) { return; } 

     var $this = $(this), 
      $next = getItem($this, 'next'), 
      num = $this.prevAll().length + 1; 


     // set the timeout for showing 
     // the next item in 5 seconds 
     timeout = setTimeout(function() { 
      showItem($this, $next); 
     }, 3000); 
    }, 

    handleBtnClick = function(e) { 
     clearTimeout(timeout); 

     manualMode = true; 

     var $currentItem = $items.filter(':visible'), 
      $itemToShow = getItem($currentItem, e.data.direction); 

     showItem($currentItem, $itemToShow); 
    }; 

    $items.eq(0).fadeIn(500, fadeCallback); 

}); 

這工作適合我第一次加載頁面,但是當我改變與此的內容:

<script type="text/> 
$('#nuestra_tienda_show').click(function() 
    { 
    $('.containerGaleria').html(''); 
    $('<ul id="slideshow"><li><img src="img/Escaparates_2011/img1.jpg" alt="Dormitorio azul turquesa." /></li><li><img src="img/Escaparates_2011/img2.jpg" alt="Escaparate Agosto 2011." /></li><li><img src="img/Escaparates_2011/img3.jpg" alt="Escaparate Enero 2011." /></li><li><img src="img/Escaparates_2011/img4.jpg" alt="Escaparate Junio 2011." /></li><li><img src="img/Escaparates_2011/img5.jpg" alt="" /></li><li><img src="img/Escaparates_2011/img6.jpg" alt="" /></li><li><img src="img/Escaparates_2011/img7.jpg" alt="" /></li><li><img src="img/Escaparates_2011/img8.jpg" alt="" /></li><li><img src="img/Escaparates_2011/img9.jpg" alt="" /></li><li><img src="img/Escaparates_2011/img10.jpg" alt="" /></li><li><img src="img/Escaparates_2011/img11.jpg" alt="" /></li><li><img src="img/Escaparates_2011/img12.jpg" alt="" /></li><li><img src="img/Escaparates_2011/img13.jpg" alt="" /></li><li><img src="img/Escaparates_2011/img14.jpg" alt="" /></li></ul> ') 
     .prependTo('.containerGaleria'); 
     $('#galeria_seleccionada').html('Nuestra tienda 2011'); 
     location.reload(); 
     }); 
</script> 

所以基本上,我做的是,在某個鏈接上的onclick()事件後,我改變了div的html內容,但很明顯,它不使用jquery,因爲它一開始沒有加載。任何想法如何解決這個問題?

如果我使用location.reload();它顯示了第一項我裏面,所以它並沒有爲我工作...

編輯:
等待,我編輯的jsfiddle ...

+0

爲什麼你不把你的畫廊代碼包裝在一個函數中,並在文檔上調用它。那麼,如果您需要更改元素,請更改它們並再次調用函數? – RaphaelDDL

+0

我們沒有用於其他主題的html。請發佈鏈接/按鈕的HTML代碼 –

+0

您無法刪除已執行的JavaScript,但是,您可以通過將其存儲在函數中並根據需要多次運行該函數來重新執行JavaScript。 –

回答

1

你需要爲創建一個初始化的方法幻燈片和回憶,當你需要。

我想作嘔看到怎麼這個js設置,所以我會忽略它,並張貼我會如何處理它:

$(document).ready(function(){ 
    slideshow.init(); 

    $('#nuestra_tienda_show').on('click', function() 
    { 
     $('.containerGaleria').html(''); 
     $('<ul id="slideshow"><li><img src="img/Escaparates_2011/img1.jpg" alt="Dormitorio azul turquesa." /></li><li><img src="img/Escaparates_2011/img2.jpg" alt="Escaparate Agosto 2011." /></li><li><img src="img/Escaparates_2011/img3.jpg" alt="Escaparate Enero 2011." /></li><li><img src="img/Escaparates_2011/img4.jpg" alt="Escaparate Junio 2011." /></li><li><img src="img/Escaparates_2011/img5.jpg" alt="" /></li><li><img src="img/Escaparates_2011/img6.jpg" alt="" /></li><li><img src="img/Escaparates_2011/img7.jpg" alt="" /></li><li><img src="img/Escaparates_2011/img8.jpg" alt="" /></li><li><img src="img/Escaparates_2011/img9.jpg" alt="" /></li><li><img src="img/Escaparates_2011/img10.jpg" alt="" /></li><li><img src="img/Escaparates_2011/img11.jpg" alt="" /></li><li><img src="img/Escaparates_2011/img12.jpg" alt="" /></li><li><img src="img/Escaparates_2011/img13.jpg" alt="" /></li><li><img src="img/Escaparates_2011/img14.jpg" alt="" /></li></ul> ') 
     .prependTo('.containerGaleria'); 
     $('#galeria_seleccionada').html('Nuestra tienda 2011'); 
     slideshow.init(); 
    }); 
}); 

var slideshow = { 
    timeout: null, 
    manualMode: false, 
    total: 0, 
    init: function(){ 
     clearTimeout(this.timeout); 
     var items = $('#slideshow').find('li').hide(); 
     this.total = items.length; 
     items.eq(0).fadeIn(500, this.fadeCallback); 
    }, 
    getItem: function(item, trav) { 
     var returnItem = item[trav](); 
     return returnItem.length ? 
      returnItem : 
      items[(trav == 'next') ? 'first' : 'last'](); 
    }, 
    showItem: function(currentItem, itemToShow) { 
     var itemToShow = 
      itemToShow || this.getItem(currentItem,'next'); 

     currentItem.fadeOut(300, function() { 
      itemToShow.fadeIn(300, this.fadeCallback); 
     }); 
    }, 
    fadeCallback: function() { 
     if (manualMode) { return; } 

     var $this = $(this), 
      next = getItem($this, 'next'), 
      num = $this.prevAll().length + 1; 

     // set the timeout for showing 
     // the next item in 5 seconds 
     timeout = setTimeout(function() { 
      this.showItem($this, next); 
     }, 3000); 
    }, 
    handleBtnClick: function(e) { 
     clearTimeout(this.timeout); 

     this.manualMode = true; 

     var currentItem = items.filter(':visible'), 
      itemToShow = this.getItem(currentItem, e.data.direction); 

     this.showItem(currentItem, itemToShow); 
    }, 
    handleBtnClick: function(e) { 
     clearTimeout(this.timeout); 

     this.manualMode = true; 

     var currentItem = items.filter(':visible'), 
      itemToShow = this.getItem(currentItem, e.data.direction); 

     this.showItem(currentItem, itemToShow); 
    }; 
}; 

然後你只需調用slideshow.init()當你要重新評估幻燈片內容。

我沒有徹底審查過這個,但總的想法是將這個大量的變量鏈變成一個單一的js對象幷包含整個事情。

我不明白你爲什麼要在click函數中寫這樣的幻燈片內容。您正在擦除容器的html,創建元素,然後將它們預先放入容器並重復使用同一個字符串重複標題ID。爲什麼不直接將幻燈片的html設置爲新圖像?

$('#slideshow').html('<li><img src="img/Escaparates_2011/img1.jpg" alt="Dormitorio azul turquesa." /></li><li><img src="img/Escaparates_2011/img2.jpg" alt="Escaparate Agosto 2011." /></li><li><img src="img/Escaparates_2011/img3.jpg" alt="Escaparate Enero 2011." /></li><li><img src="img/Escaparates_2011/img4.jpg" alt="Escaparate Junio 2011." /></li><li><img src="img/Escaparates_2011/img5.jpg" alt="" /></li><li><img src="img/Escaparates_2011/img6.jpg" alt="" /></li><li><img src="img/Escaparates_2011/img7.jpg" alt="" /></li><li><img src="img/Escaparates_2011/img8.jpg" alt="" /></li><li><img src="img/Escaparates_2011/img9.jpg" alt="" /></li><li><img src="img/Escaparates_2011/img10.jpg" alt="" /></li><li><img src="img/Escaparates_2011/img11.jpg" alt="" /></li><li><img src="img/Escaparates_2011/img12.jpg" alt="" /></li><li><img src="img/Escaparates_2011/img13.jpg" alt="" /></li><li><img src="img/Escaparates_2011/img14.jpg" alt="" /></li>'); 
+0

雖然我認爲您的解決方案是膨脹的一切,我不明白爲什麼Sonhja的代碼將讓你插科打諢。有不同的編碼風格,每個人都有空間。也許他還在學習,也許他不在乎對象提供的組織......給定這樣一個簡單的任務,組織一切如此簡潔的好處是什麼?這可能只是你的個人品味,你知道嗎? – BeetleTheNeato

+0

這是一個很好的解決方案,但是你改變了太多,我無法理解它,實際上滑塊不起作用......差不多完成了!不過,這並不幻燈片...更改內容完美,但不會滑......> _ < @BeetleTheNeato是......這麼牛逼...但女人! – Sonhja

+0

我爲一家公司工作,我們維護某些習慣以避免代碼被他人處理時的混淆。你可以有自己的風格,繼續前進。但是如果你在這裏申請一份工作,而且我看到那些代碼,你最好有一個非常令人印象深刻的投資組合,否則我最終會認爲調整的曲線可能太高,以致無法支付費用。沒有什麼是個人的,只是現實。無論如何,這樣的事情不會受到警告。我不知道什麼時候開始,但它可能很好。 –

相關問題