2010-01-20 93 views
0

這是我想要實現的:如果語句爲Jquery/Javascript

我有一個div,根據滾動位置在固定和絕對位置之間切換。我有一個可以工作的例子,但我注意到它有點慢,因爲它不斷改變每個滾動像素的位置。所以我認爲添加額外的if語句(如開關類型)可以補救一點。但它當然破裂了。

我很少使用jQuery/javascript所以在我看來這似乎是正確的,但它不是..任何幫助?也許甚至比if語句更好地做到這一點。

var top = blah; 
var bottom = blah; 
var ison=0; 
$(window).scroll(function (event) { 
    var y = $(this).scrollTop(); 
    if (y >= top && y <= bottom) { 
     if (ison===0) { 
      $('#float-contain').addClass('fixed'); 
      var ison = 1; 
     } 
    } else { 
     if (ison===1) { 
      $('#float-contain').removeClass('fixed'); 
      var ison = 0; 
     } 
    } 
}); 
+0

所以......這裏的'嗒嗒'是什麼,以及如何比較y? – JAL

+1

您是否想過使用布爾值而不是數字來表示ison?即... var ison = false; ... if(!ison){...; ISON = TRUE; } ... if(ison){...; ISON = FALSE; } ... – jball

+0

莎莎,頂部將是容器的頂部偏移量,因爲它通常是,底部將是整個容器的位置+浮動容器的高度。它只是將兩個邊界與滾動上的y位置進行比較。 –

回答

0

我覺得緩慢是由於$('#float-contain')由於重複document.getElementById調用。你可以緩存jQuery對象,這樣你就不會這樣做。 addClass/removeClass/toggleClass如果元素已經有/沒有類,則不執行任何操作。

這應該只是罰款:

var top = blah; 
var bottom = blah; 
var $elem = $('#float-contain'); 
$(window).scroll(function (event) { 
    var y = $(this).scrollTop(); 
    $elem.toggleClass('fixed', (y >= top && y <= bottom)); 
}); 

您也可以使此代碼運行時,用戶完成滾動,而不是不斷地運行,或者您可以「調節」它每一次說100ms的運行。這是實現第一種技術的一種方法 - http://www.matts411.com/post/delaying_javascript_event_execution/

+0

別人解決了原來的問題,但我覺得你的建議會給我一個更好的選擇。謝謝! –

0

最有可能的問題是,ISON的價值永遠是不確定的,當您嘗試訪問它,因爲你所定義的函數內部它,而只是試圖讀它之後。

每當你在一個函數中定義一個變量時,即使它沒有在代碼中稍後被聲明,它也會自動覆蓋任何具有相同名稱的變量 - 因此在函數內部,ison的值是undefined直到它被定義了,並且由於你的if子句,代碼從未達到過。

嘗試從函數內的var ison = n語句中刪除var,這可能有所幫助。這將使其訪問您在全局範圍內聲明的變量。

0

這裏,

if (ison===0) { 
     $('#float-contain').addClass('fixed'); 
     var ison = 1; 
    } 

刪除var因爲你重新聲明ison它。 (對另一個分支做同樣的事情)。

2

嘗試,如果聲明中這樣取出裏面的每一個「變種」:

if (y >= top && y <= bottom) { 
    if (ison===0) { 
     $('#float-contain').addClass('fixed'); 
     ison = 1; 
    } 
} else { 
    if (ison===1) { 
     $('#float-contain').removeClass('fixed'); 
     ison = 0; 
    } 
} 

你已經宣佈VAR ISON全球以上這一切。通過在函數內重新聲明變量,您正在創建新的本地實例,這會導致一些不良結果。我不確定這是否只是問題,但它絕對是其中的一部分。

順便說一句,這是一個很好的overview of global and local variable in Javascript。他們甚至包括一個同名全局和局部變量的例子(我試圖避免)。

+0

謝謝,有趣的是我正在看同樣的東西。我肯定會更多地通過JavaScript。 –