1

我有一个函数stickyhead(),它基本上将h2固定在页面顶部,当你向下滚动页面时,当你到达一个新的h2时,h2中的文本会发生变化,所以它就像iphone的电话簿/联系人或安卓手机。当您滚动浏览名称以 A 开头的联系人时,带有字母 A 的标题将粘在顶部,然后当您到达 B 名称时,它将页面顶部标题中的文本更改为 B。.switch当标签选择了类时,我想启用/禁用它。下面的代码工作得很好,但我想知道这是否是一种不好的方法?我是否多次重新加载我的功能?有更好的方法吗?

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

3 回答 3

0

保持函数绑定可能更有效,但使用状态变量来确定是否stickyhead()实际执行任何操作。

例如

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

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

然后,而不是取消绑定功能只是使用stickyheadActive=false;

于 2010-11-22T09:19:46.010 回答
0

我正在努力可视化您的代码,但您不太可能需要不断地绑定和解除绑定。您的滚动处理程序中应该有一个布尔值,它有条件地运行处理程序中的代码:

var doStickyHead = true;
$(window).scroll(function(){
    if (doStickyHead) {
        // do your code
    }
});
$('.switch').click(function(){
    doStickyHead = !doStickyHead; // invert the value of doStickyHead
});
于 2010-11-22T09:21:57.873 回答
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;
    }
});

但请记住,在可预见的不需要时不解除绑定处理程序是浪费内存。当资源稀缺时,绑定/解除绑定是丑陋的,但也是合理的。

此外,当元素被删除并且处理程序保持绑定时...... Viola!内存泄漏的完美案例。可能看起来无关紧要,但只是觉得我应该提一下,以防万一您正在为移动平台编写此内容。

于 2010-11-22T11:48:52.293 回答