2012-11-11 53 views
-1

因此,我正在處理一些代碼,我需要檢查我生成的數組中的某個元素是否符合特定條件,如果有,則使用fadeIn ,否則淡出#next和#previous元素。以下是我現在有:如果任何對象滿足數組中的方程條件

HTML: 
<div id="#next"></div> 
<div id="#prev"></div> 
<div id="page1" class="section"></div> 
<div id="page2" class="section"></div> 
<div id="page3" class="section"></div> 

的Javascript

$(window).on('scroll', function() { 
var i, stuff = [], 
scrollTop = $(window).scrollTop(), 
sects = $('.section') 

sects.each(function() { 
stuff.push(parseInt($(this).offset()['top'],10)); 
}); 

for(i = 0; i < stuff.length; i++) { 

     if (stuff[i] == scrollTop) { $('#next,#prev').fadeIn("fast")} 
     if (stuff[i] != scrollTop) { $('#next,#prev').fadeOut("fast")} 
} 

}); 

上面的代碼會導致一個閃爍的效果,因爲,無論什麼時候,「東西」總會有一個值不等於scrollTop的。因此,我爲什麼要說「如果有返回的對象都具有偏移(‘東西’)等於scrollTop的,然後淡入,否則,淡出。

任何幫助將不勝感激!

+1

你不應該直接在scroll事件下運行代碼[使用定時器並緩存你的選擇器](http://ejohn.org/blog/learning-from -twitter /)。 –

+0

沒錯,事件像一百次一樣發生,這對你的處理程序來說是不必要的頻率 –

+0

這真是一個偉大的觀點,謝謝fo我指着這個。如何調整窗口大小,緩存更新? –

回答

0

這是一個相當基本的標誌值場景:

var flag = false; 
for(i = 0; i < stuff.length; i++) { 

     if (stuff[i] == scrollTop) { 
      flag = true; 
      break; 
     } 
} 

if (flag) 
    $('#next,#prev').fadeIn("fast"); 
else 
    $('#next,#prev').fadeOut("fast");