Javascript-форум (https://javascript.ru/forum/)
-   jQuery (https://javascript.ru/forum/jquery/)
-   -   Реакция браузеров на событие scroll (https://javascript.ru/forum/jquery/37340-reakciya-brauzerov-na-sobytie-scroll.html)

Алек 16.04.2013 13:57

Реакция браузеров на событие scroll
 
Здравствуйте, я пишу вот такую функцию.
$(window).scroll(function(){
alert("Ехал Грека через реку");
});
Браузеры Мозила и Опера неадекватно реагируют на прокрутку, всплывает окно и в нём надо раз 15 нажать OK, а в браузерах IE и Гугл всё отображается хорошо.
От чего это зависит?

Aetae 16.04.2013 14:18

Зависит от реализации alert.

Алек 16.04.2013 14:24

Ааа! То есть это реакция на метод alert, а не на событие scroll.
Всё ясно, спасибо.

skrudjmakdak 17.04.2013 10:01

в смысле зависит от реализации alert?? давайте изменим немного код..:
var i = 0;
$(window).scroll(function(){
i++;
});

а потом выведем значение i в хроме и опере.. в хроме будет 1, а в опере около 20..
имхо тут далеко дело не в алерте...

Aetae 17.04.2013 12:12

skrudjmakdak, бредите.
i будет столько - сколько раз вызвана scroll, а вызываться она будет до тех пор пока вы сколлите. КО.

skrudjmakdak 17.04.2013 12:20

ммм)) видимо мы друг друга не понимаем. я один раз крутонул колесико в двух браузерах.. а числа разные..
т.е. в опере за один "щелчек" скролл вызывается около 20 раз, но там можно заметить, что скролит анимированно (т.е. каждый шаг вызывает событие). а в хроме перескакивает за 1 раз
возможно этим и можно объяснить вот это все..

Алек 17.04.2013 13:11

Объяснить конечно можно, но с этом всё равно-же ничего не поделать.
Событие .scroll очевидно по разному обрабатывается разными браузерами. Позже буду рассматривать .scroll на других примерах, посмотрю как в них будет работать.

Aetae 17.04.2013 19:53

Цитата:

Сообщение от skrudjmakdak (Сообщение 246643)
ммм)) видимо мы друг друга не понимаем. я один раз крутонул колесико в двух браузерах.. а числа разные..
т.е. в опере за один "щелчек" скролл вызывается около 20 раз, но там можно заметить, что скролит анимированно (т.е. каждый шаг вызывает событие). а в хроме перескакивает за 1 раз
возможно этим и можно объяснить вот это все..

Естественно, только пробема не в браузерах, а в их настройке. Что зависит от конкретного пользователя. В опере включена так называемая "плавная прокрутка", а в хроме нет.

Скролл вызывается столько раз сколько происходит перерисовок. Соответственно в данном случае в опере отрисовавыется практически попиксельно, а в хроме куском. И это совершенно не значит, что у другого пользователя, с другими настройками не будет иначе.

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

По поводу же alert: нормальный alert должен моментально стопарить работу в конкретном окне. То что успевает настековаться куча алертов - имхо бага.

SFproG 29.03.2015 20:23

Проблему-то решили? Объясните, пожалуйста. Не могу сообразить как "алерт" вывести один раз в любых браузерах. В опере 20 раз выскакивает, а нужно один.
var ScrollTop = 0, Top = 0;
        $('#div').scroll(function(){
            Top = $('#div').scrollTop();
            if (ScrollTop < Top){ 

		alert('Какая-то функция');//крутим колесо вниз
				   
            } else if (ScrollTop > Top) {
			    
		alert('Какая-то функция');//крутим колесо вверх
            }
            ScrollTop = Top;
        });

рони 29.03.2015 21:09

SFproG,
http://javascript.ru/forum/jquery/37...tml#post249336


Часовой пояс GMT +3, время: 16:25.