Почему в jQuery событие scroll не работает при body margin: 0;?

Полтора часа не мог понять, почему не работает событие scroll, но все же путем отключения стилей, а потом построчного стирания обнаружил, что же убивает эвент scroll:

body {
    margin: 0;
}


Как только комментирую margin, событие начинает работать, только выставляю - и все, событие не срабатывает.

Кто-нибудь сталкивался с подобным? Как мне убрать отступы у body и при этом сохранить возможность отслеживания события прокрутки?

Собственно, событие ловлю так:

<script type="text/javascript">
$(document).ready(function(){
	$(window).scroll(function(){
		alert(1);
	});
});
</script>


Отладочная консоль белоснежна.
  • Вопрос задан
  • 25541 просмотр
Пригласить эксперта
Ответы на вопрос 10
@Joe_May
Жесть я 1.5 дня искал эту же ошибку у себя в JS, наткнулся на этот вопрос поиграл со стилями, в результате у меня было свойство body {height: 100%}, поэтому webkit"овские браузеры не запускали событие scroll()... это так если кто в будущем столкнется с этим, автору отдельное спасибо за вопрос =)
Ответ написан
v_decadence
@v_decadence
Не понял, причём тут margin: 0. Может дело просто в том, что в примере из вашего архива у вас высота контента меньше окна браузера, скролла нет и соответственно не срабатывает событие. Уменьшение окна браузера или увеличение высоты контента приводит к появлению скролла и срабатыванию события.
Ответ написан
@FRiMN
У меня перестаёт работать при
html, body {
    height: 100%;
}
Ответ написан
CanVas
@CanVas
Веб-мастер
Попробуйте так
( function( $ ) {
    $(document).ready(function(){
        $(window).scroll(function(){
            alert(1);
        });
    });
} )( jQuery );


у меня сработало. а как у вас - не работает.
Ответ написан
Комментировать
@Hillo_dp
Столкнулся с похожей проблемой. Выяснил что в моём случае проблема была в том что родитель имел высоту в 100% и был растянут почти на всю высоту страницы, то есть больше видимой зоны. Прижимал футер к низу. Решение оказалось банальным.
.your_container {
    min-height: 100vh;
}
Ответ написан
Комментировать
Пример бы, где не работает. Здесь (на Тостере) при цеплянии приведенного скрипта alert отрабатывает, несмотря на margin:0; для body.
Ну и еще работающий пример.
Нужно больше информации. Может быть другие скрипты или еще что?
Ответ написан
Проверьте размеры и позиции вашего блока до начала работы и во время работы скрипта. jQuery в некоторых случаях обнуляет размеры и позиции из-за чего не работают различные эффекты
Ответ написан
Комментировать
olya_moska
@olya_moska
Вперед и вверх!
Поделюсь, меня тоже настигла данная проблема. Реализовывала scrollspy, который сначала тоже не сразу удалось сделать (нюансы с overflow и height). Все-таки сделала, но потом оказалось что не у меня не работает кнопка "вверх" (появление-исчезновение по скролу).
После пары часов мучений (обидно за время). Не могла понять что именно событие scroll не отрабатывает. Важно что за классы заданы у элементов страницы. Scrollspy я отслеживала по контейнеру main а не по body и именно у main был задан overflow:auto.
Решение оказалось простым до ужаса - просто стала отслеживать Scrollspyпо body и ему задала overflow:auto. Кнопка "вверх" заработала.
Ответ написан
Комментировать
@Vlad-zorro
Работает - $(window).scroll(function(){ });
Не работает - $('body').scroll(function(){ });
Ответ написан
Комментировать
@a22432
Немного Web
У меня тоже не работал scroll
Оказалось у основного блока div#content было свойство position: fixed; - для адаптивного меню.
Убрал fixed всё заработало.
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы