2012-01-11 56 views
0

我想設置一個隨機的不透明度動畫持續時間爲每部分元素。我的想法是獲取元素的索引,然後將其與隨機數相乘並將其應用於持續時間。但是這同樣適用於整個事情......我做錯了什麼?jQuery的申請外匯每個

這裏是我的代碼:

var numLow  = 100, 
    numHigh  = 3000, 
    adjustedHigh = (parseFloat(numHigh) - parseFloat(numLow)) + 1, 
    numRand  = Math.floor(Math.random()*adjustedHigh) + parseFloat(numLow); 

$('ul li').each(function(index, value) { 
    var numbb = index + 1 * numRand; 
    $(this).css('opacity','0'); 
    $(this).animate({ 
     opacity: 1 
    },numbb); 
}); 

這裏是鏈接到它:http://jsfiddle.net/moabi/PCqMC/

回答

1
$('ul li').each(function(index, value) { 
     var numbb = (index + 1) * numRand; 
     $(this).css('opacity', 0).animate({ 
      opacity: 1 
     }, numbb); 
    }); 

注意,我添加了index + 1周圍括號所以他們將乘前加入。另外我鏈接.css().animate()調用,因此$(this)只需要創建一次。

這裏是一個演示:http://jsfiddle.net/PCqMC/6/

UPDATE

在一個側面說明,使用for()循環正常結束.each()一個很大的性能提升:

var $LIs = $('ul li'); 
    for (var i = 0, len = $LIs.length; i < len; i++) { 
     var numbb = (i + 1) * numRand; 
     $LIs.eq(i).css('opacity', 0).animate({ 
      opacity: 1 
     }, numbb); 
    }); 

一個JSPerf示範:http://jsperf.com/jquery-each-vs-for-loops/2

+0

THX,但我只想要隨機的時間,我想所有的元素在1不透明 – moabi 2012-01-11 08:13:58

+0

結束@moabi嘗試更新,我誤解了第一次:http://jsfiddle.net/PCqMC/6/ – Jasper 2012-01-11 08:18:26

+0

@moabi你需要在括號裏有'index + 1'在乘法發生之前添加嘿。操作順序是乘法然後加法。 – Jasper 2012-01-11 08:19:08

0

你需要圍繞你的一個計算來獲得變化的一些parens。乘以numRand首先發生,然後添加索引,所以你基本上沒有變化。添加括號給你更多的變化,你打算:

var numLow = 100, 
    numHigh = 3000, 
    adjustedHigh = (parseFloat(numHigh) - parseFloat(numLow)) + 1, 
    numRand = Math.floor(Math.random()*adjustedHigh) + parseFloat(numLow); 

$('ul li').each(function(index, value) { 
    var numbb = (index + 1) * numRand; 
    $(this).css('opacity','0'); 
    $(this).animate({ 
     opacity: 1 
    },numbb); 
}); 

在的jsfiddle:http://jsfiddle.net/jfriend00/YRTU5/

我也建議使用.fadeIn()作爲不透明度衰落的快捷方式。

2

您正在使用內循環相同的隨機數。所以,在循環內生成隨機數!下面

工作代碼: -

$('ul li').each(function(index, value) { 
     var numRand = Math.floor(Math.random()*adjustedHigh) + parseFloat(numLow); 
     var numbb = index * numRand; 
     $(this).css('opacity','0'); 

     $(this).animate({opacity: 1},numbb); 
}); 

其餘代碼應該是因爲它是:)

後碧玉的意見,認爲應numbb隨着指數1,2,3等修改修改後的代碼

+0

謝謝你,但我不過我的VAR numbb會做的伎倆,如果我們把一個數字:100和與指數相乘(1,2,3 ......)這個應該這樣做沒有? – moabi 2012-01-11 08:38:13

+1

我相信問題是如何通過元素的索引來增加動畫的持續時間。問題代碼是'var numbb = index + 1 * numRand;'在將索引添加到索引之前,將隨機數乘以1,這隻會給每個索引的差值1毫秒。 – Jasper 2012-01-11 08:47:26

+1

@Jasper,如果是這樣,var numbb = index * numRand。會做的東西。 – 2012-01-11 08:52:19