我是否添加了一堆不必要的事件处理程序?

时间:2011-08-23 22:15:01

标签: jquery events bind

我怀疑我可能在这里使用了错误的事件处理程序。有人可以指出我这样做的正确/更好的方法吗?

基本上我正在监视window.resize事件。如果窗口小于屏幕上的元素,我将绑定到scroll事件。我的问题是resize事件不断被抛出。我认为这意味着我不断重新绑定到滚动事件。这看起来很糟糕。关于更好地做到这一点的想法?

我可以使用变量来跟踪它是否已被绑定......但这对我来说似乎很笨拙。

    //when window is resized check whether the sidebar still fits on screen
    $(window).resize(checkIt);

    function checkIt() {    
        botOfSidebar = $(obj).height() + topOfSidebar;
        if (botOfSidebar < $(window).height()) {    
            //discard event handler
            $(window).unbind("scroll", dynamicallyAdjustIt);  
            fixIt();                                                                                            //fix it in place
        }
        else {
            console.log("dynamically adjust it");
            $(window).scroll(dynamicallyAdjustIt);      
        }
    }

2 个答案:

答案 0 :(得分:1)

为什么不简单地绑定一次滚动事件,然后当大小低于阈值时,更新变量以启用它?

AKA

$(window).resize(function() { });
$(window).scroll(function()
{
     if( /* Check to see if window is greater than some set size */ )
         return;

     // Do Logic
});

答案 1 :(得分:0)

考虑一下:

$( window ).bind( 'scroll', function () {

    if ( $( obj ).height() + topOfSideBar < $( window ).height() ) {
        fixIt();
    } else {
        dynamicallyAdjustIt();
    }

});