Как выполнить обратный вызов при изменении результата логического оператора? - PullRequest
2 голосов
/ 27 февраля 2011

Можно ли с помощью jquery запускать функцию, как только условный оператор превращается из ложного в истинное?

Я ищу решение, которое не использует все ресурсы системы (т. Е. Не setInterval(function(){},1)).

В конце я использовал .scroll (), а не более амбициозные предложения ниже.

1 Ответ

4 голосов
/ 27 февраля 2011

Если высота элемента не изменена, вам нужно только наблюдать за событиями resize и scroll .Так что попробуйте:

$(window).bind('resize', handler);
$(document).bind('scroll', handler);

Поскольку эти события могут запускаться довольно часто, вы должны держать операции обработчика как минимум.Например, вы можете кэшировать вызовы $, используя замыкание :

var handler = (function(a, b){
    return function(event) {
        if ((a.scrollTop() + a.height()) == b.height()) {
            /* … */
        }
    })($('#lay3b_top'), $('#measuring_wrapper'));

Здесь переменные a и b внутри внутренней функции, возвращаемой функциейвнешняя функция связана с возвращаемыми значениями $('#lay3b_top') и $('#measuring_wrapper') соответственно.(function(){})() является выражением анонимной функции, которое немедленно вызывается с заданными аргументами для привязки аргументов к области действия функции.

...