2014-08-30 5 views
0

Im используя следующий пример, чтобы определить направление прокрутки. Однако, похоже, он действует на каждое движение прокрутки. Есть ли способ заставить его работать только тогда, когда меняется направление?scrolltop обнаруживает прокрутку несколько раз

var lastScrollTop = 0; 
$(window).scroll(function(event){ 
    var st = $(this).scrollTop(); 
    if (st > lastScrollTop){ 
     // downscroll code 
    } else { 
     // upscroll code 
    } 
    lastScrollTop = st; 
}); 

ответ

0

Несомненно. Просто используйте переменную-заполнителя, которая отслеживает пройденное последнее направление, а затем возвращает false, если это совпадение.

var lastScrollTop = 0; 
var lastDirection = ""; 
$(window).scroll(function (event) { 
    var st = $(this).scrollTop(); 
    if (st > lastScrollTop) { 
     lastScrollTop = st; 
     if (lastDirection === 'down') return false; 
     // downscroll code 
     console.log("scrolling down"); 
     lastDirection = 'down'; 
    } else { 
     lastScrollTop = st; 
     if (lastDirection === 'up') return false; 
     // upscroll code 
     console.log("scrolling up"); 
     lastDirection = 'up'; 
    } 

}); 
+0

Привет, он по-прежнему срабатывает несколько раз, для каждого изменения прокрутки. Я пытаюсь заставить его стрелять только при изменении направления. Я думаю, что в коде с ошибкой lastDirection должна быть ошибка? Должна ли она копировать переменную lastScrollTop? –

+0

Я, по общему признанию, не пробовал код. Позвольте мне быстро вставить его в скрипку и посмотреть, что может произойти. –

+0

Ах, исправил. Проблема состояла в том, что lastDirection получал повторную инициализацию каждой итерации, потому что она была определена в лямбда-функции. Было бы лучше определить его в той же области, что и lastScrollTop. См. Мой [скрипка] (http://jsfiddle.net/vupzbvzw/3/) –

Смежные вопросы