2015-09-10 3 views
0

Я работаю над созданием навигационной панели "float then fix", работающей в большинстве браузеров без каких-либо библиотек JavaScript (например, JQuery).Как я могу заставить Firefox запускать onscroll один раз, как это делает Chrome, за прокрутку «action?»?

Это работает на Chrome, но у меня небольшая проблема с FF, и, похоже, это связано с тем, что FF запускает onscroll несколько раз, когда вы выполняете «действие прокрутки» - клавиши PdDn, PdUp, вверх и вниз, вверх и вниз стрелки на полосе прокрутки, нажатие полосы прокрутки и т. д.

Хром срабатывает только один раз, но FF сначала несколько раз, сколько зубцов зависит от длины веб-страницы и вашего текущего положения.

Есть ли способ получить FF только один раз, как Chrome?

Я поставлю test page, который позволит вам посмотреть, сколько раз срабатывает onscroll, записывая «прокрутку» на консоль. Это должно быть примерно через 10 минут. Я верну ссылку на этот вопрос на странице.

В верхней части страницы будут содержаться комментарии, поясняющие, как их использовать.

Есть ли у кого-нибудь идеи о том, чтобы получить только одно событие onscroll, когда вы формируете «прокрутку»?

+0

Отключение плавной прокрутки в firefox делает трюк - также в моем Chrome несколько событий срабатывают на PgDn/PUp, Up, Down и т. Д., А также - пока я не выключу также гладкую прокрутку - chrome: // flags/# позволяют гладкой прокрутки –

ответ

0

Вы можете сделать что-то вроде этого:

var timer = null; 
function action(){ 
    // do stuff on scroll 
} 

function onscroll(e){ 
    clearTimeout(timer); 
    timer = setTimeout(action.bind(this, e), 100); 
} 

Таким образом, это только пожаров прокручивать события после 100мса простоя, который может или не может быть то, что вам нужно. Возможно, вам потребуется настроить задержку таймаута, чтобы получить лучший результат.