2012-01-11 5 views
0

각 요소에 대해 임의의 불투명도 애니메이션 기간을 설정하고 싶습니다. 내 아이디어는 요소의 색인을 얻은 다음 임의의 숫자로 곱하고이를 지속 시간에 적용하는 것이 었습니다. 그러나 이것은 전체 시간 동안 같은 시간을 적용합니다 ... 내가 뭘 잘못 했니?!Jquery apply each for

다음
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); 
}); 

가에 대한 링크입니다 : 나는 그래서 그들은 곱 전에 추가 될 index + 1 주위에 괄호를 추가 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); 
    }); 

여기 내 코드입니다. 또한 .css().animate() 호출을 연결하므로 $(this)을 한 번만 만들어야했습니다. 데모에 대한

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 : 제대로 .each()에 비해 큰 성능 향상이 http://jsfiddle.net/PCqMC/6/

UPDATE 사이드 노트에

, for() 루프를 사용하여 : 여기

는 데모입니다 : http://jsperf.com/jquery-each-vs-for-loops/2

+0

thx,하지만 난 무작위로 타이밍을 원한다, 나는 모든 요소가 불투명도에서 1로 끝나길 원한다. – moabi

+0

@moabi 처음 시도했을 때 나는 오해했다. http://jsfiddle.net/PCqMC/6/ – Jasper

+0

@moabi 괄호 안에'index + 1'을 넣어야합니다. 그래서 t 헤이는 곱셈이 일어나기 전에 더해진다. 연산의 순서는 곱셈과 덧셈입니다. – Jasper

0

유사 콘텐츠를 얻으려면 계산 중 하나에 괄호가 있어야합니다. numRand에 의한 곱셈이 먼저 발생하고 인덱스를 추가 했으므로 본질적으로 아무런 변화가 없었습니다. 당신이 의도 한대로 괄호를 추가하면 훨씬 더 변화를 제공합니다 jsFiddle에서

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/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

+1

나는 요소의 인덱스에 의해 애니메이션의 지속 시간을 증가시키는 것이 문제라고 생각한다. 문제 코드는'var numbb = index + 1 * numRand;'이며, 색인에 추가하기 전에 난수를 1 씩 곱해서 인덱스 당 1 밀리 초의 차이 만 나타냅니다. – Jasper

+1

@ 재퍼, 이것이 사실이라면, var numbb = index * numRand. 그 물건들을 할 것입니다. –