2010-06-09 90 views
0

在jquery幻燈片展示擴展之後,我創建了自己的更適合我的目的(我不喜歡所有需要加載的圖像)。現在,升級到jQuery 1.4.2(我知道我遲到了),幻燈片加載第一個圖像罰款(從線$('div#slideshow img#ssone').fadeIn(1500);朝底部),但除此之外不做任何事情。有沒有人有任何想法,哪個jQuery構造正在殺死我的腳本?實時頁面位於lplonline.org,暫時使用1.3.2。提前致謝。jquery 1.4.1打破我的幻燈片

Array.prototype.random = function(r) { 
var i = 0, l = this.length; 
if(!r) { r = this.length; } 
else if(r > 0) { r = r % l; } 
else { i = r; r = l + r % l; } 
return this[ Math.floor(r * Math.random() - i) ]; 
}; 

jQuery(function($){ 
    var imgArr = new Array(); 
    imgArr[1] = "wp-content/uploads/rotator/Brbrshop4-hrmnywkshp72006.jpg"; 
    imgArr[2] = "wp-content/uploads/rotator/IMGA0125.JPG"; 
    //etc, etc, about 30 of these are created dynamically from a db 

var randImgs = function() { 

    var randImg = imgArr.random(); 
     var img1 = $('div#slideshow img#ssone'); 
     var img2 = $('div#slideshow img#sstwo'); 

     if(img1.is(':visible')) { 
      img2.fadeIn(1500); 
      img1.fadeOut(1500,function() { 
       img1.attr({src : randImg}); 
      }); 


     } else { 
      img1.fadeIn(1500); 
      img2.fadeOut(1500,function() { 
       img2.attr({src : randImg}); 
      }); 

     } 
} 

setInterval(randImgs,9000); // 9 SECONDS 

$('div#slideshow img#ssone').fadeIn(1500); 

}); 
</script> 

<div id="slideshow"> 
<img id="ssone" style="display:none;" src="wp-content/uploads/rotator/quote-investments.png" alt="" /> 
<img id="sstwo" style="display:none;" src="wp-content/uploads/rotator/quote-drugs.png" alt="" /> 
</div> 

回答

0

啊哈!我已經繼承了這個網站,而且這個網站的原創者似乎在標題中調用了3或4個不同的js庫(scriptalicious,prototype ...)。他們中沒有一個實際上被使用。我把所有的東西都拿出來了,現在它運行得很漂亮,所以問題在於jQuery和其他庫之間的交互。謝謝Dan Heberden在任何情況下爲您提供時間和建議!

2

這是因爲你的函數是如何作用域 - 分配給它這樣一個變量:

var randImgs = function() { 
    // do stuff 
} 

現在你的setInterval有正確的函數的引用。

作爲一個快速提示:div#幻燈片(或任何標籤/ ID組合)是無效的。該ID僅用於該元素,因此說「查看所有的div並找到..的ID」是不必要的。

然而,使用這種方法,類,如div.myClassName - 說'看所有的div和找到類..'。

父母/孩子也一樣 - #parent #child - 是額外的工作 - 可以自己找到#child。然而,#parent div.myClassName是明智的,因爲這有助於縮小搜索類名爲myClassname的div的範圍。

+0

1)你能解釋爲什麼我不能做一個功能,然後像我這樣稱呼它? (我更熟悉php,所以也許這裏有一些不同......) 2)再一次,有趣的想法不使用元素#id,而是使用#id。在CSS中,最好使用div#id,因爲它限制了需要搜索該id的內容。 JavaScript(或jQuery)不同? 3)最後,我做了你提出的範圍改變,但這似乎並沒有解決問題。 – JakeParis 2010-06-09 20:05:07

+0

這是因爲setInterval在該匿名函數的範圍內運行NOT。 'to'setInterval的調用是,但不是結果間隔。當你發送一個引用(變量=函數)時,它保存鏈接。 2)我的提示是爲jQuery和CSS - (https://developer.mozilla.org/en/Writing_Efficient_CSS)。沒有必要'搜索'的id - 只有一個3)我會做另一個測試 – 2010-06-09 20:11:36

+0

或許我錯了關於函數引用,因爲它適用於jsfiddle 1.4.2:http:// jsfiddle .NET/kPG9Z / – 2010-06-09 20:17:53