2010-11-22 54 views
1

我有一個功能stickyhead(),基本上保持h2固定在頁面的頂部,當您向下滾動頁面時,h2中的文本隨着您到達新的h2而發生變化,因此它就像電話簿/聯繫人iphone或android手機。當您滾動名稱以A開頭的聯繫人時,帶有字母A的標題將保持頂部,然後在您到達B名稱時將頁面頂部標題中的文本更改爲B.我想在.switch標籤選擇類時啓用/禁用此選項。下面的代碼工作得很好,但我想知道這是否是一個不好的方法來做到這一點?我是否多次重裝我的功能?有沒有更好的方法來做到這一點?Jquery:啓用/禁用某個功能? (綁定/解除綁定?)最好的方法來做到這一點?

$('.switch').click(function() { 
if ($('.switch label').hasClass('selected')) { 
    stickyhead(); 
} else { 
    $(window).unbind('scroll'); 
} 
}); 

回答

0
//Assuming I've understood the scenario correctly, wouldn't this work. 
$('.switch').delegate("label.selected", "click", function() { 
    if (stickyheadActive){ 
     //do your stuff here 
    } 
    else{ 
     return; 
    } 
}); 

但是千萬記住,當可預見不需要不解除綁定的處理程序是浪費內存。 當資源稀缺時,綁定/解除綁定是醜陋的,但是合理的。

此外,當元素被刪除,處理程序仍然綁定...中提琴!內存泄漏的完美案例。可能似乎不相關,但只是覺得我應該提到這一點,以防萬一你爲移動平臺寫這個。

0

這可能是更有效地保持綁定的功能,但使用狀態變量來確定是否stickyhead()實際上做什麼或沒有。

function stickyhead(){ 
    if (!stickyheadActive) return; //Guard clause to prevent action 

    //...Your current code...// 
} 

然後,而不是解除綁定功能,只需使用stickyheadActive=false;

+0

哎呦。曾經說過使用'stickyhead = false;'但當然這應該是'stickyheadActive = false'。糾正。 – 2010-11-22 10:35:01

0

我稍微掙扎可視化你的代碼,但它是不可能的,你需要不斷地結合,並解除綁定。你應該在你的滾動處理一個布爾值,有條件地運行在處理程序的代碼:

var doStickyHead = true; 
$(window).scroll(function(){ 
    if (doStickyHead) { 
     // do your code 
    } 
}); 
$('.switch').click(function(){ 
    doStickyHead = !doStickyHead; // invert the value of doStickyHead 
});