Я добавляю кучу ненужных обработчиков событий? - PullRequest
2 голосов
/ 24 августа 2011

Я подозреваю, что я могу неправильно использовать обработчики событий здесь.Может кто-нибудь указать мне правильный / лучший способ сделать это?

По сути, я отслеживаю событие window.resize.Если окно меньше, чем экранный элемент, я привязываюсь к событию прокрутки.Моя проблема в том, что событие 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 ]

1 голос
/ 24 августа 2011

Почему бы просто не привязать событие прокрутки один раз, а затем, когда размер ниже порогового значения, обновить переменную, чтобы включить его?

AKA

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

     // Do Logic
});
0 голосов
/ 24 августа 2011

Учтите это:

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

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

});
...