Почему в 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>


Отладочная консоль белоснежна.
  • Вопрос задан
  • 25557 просмотров
Пригласить эксперта
Ответы на вопрос 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 всё заработало.
Ответ написан
Комментировать
Ваш ответ на вопрос

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

Войти через центр авторизации
Похожие вопросы
SummerWeb Ярославль
от 120 000 до 180 000 ₽
КРАФТТЕК Санкт-Петербург
от 60 000 до 80 000 ₽
Brightdata Тель-Авив
от 5 500 до 6 500 $
02 июн. 2024, в 01:13
2000 руб./за проект
01 июн. 2024, в 23:49
50000 руб./за проект
01 июн. 2024, в 23:20
30000 руб./за проект