#jquery #html #css
#jquery #HTML #css
Вопрос:
У меня есть div id="header"
с начальным правилом css: padding: 25px 0;
. При прокрутке страницы вниз я хочу уменьшить заполнение этого div:
$(document).ready(function() {
var headerID = $("#header");
$(this).scroll(function() {
if (!$(this).scrollTop())
headerID.toggleClass("headerScrolled");
else if (!headerID.is(".headerScrolled"))
headerID.toggleClass("headerScrolled");
});
});
.headerScrolled {
padding: 15px 0;
}
Однако, когда я прокручиваю страницу вниз, заполнение не меняется. Что не так с моим кодом?
Комментарии:
1. вы используете один и тот же код для обоих условий if-else? Какова цель этого?
Ответ №1:
Ваши два условия отменяют друг друга. Имеет смысл выполнить один вызов toggleClass()
и предоставить логический аргумент, чтобы указать, следует ли добавлять или удалять класс на основе текущего scrollTop
значения. Также обратите внимание, что вы должны прослушивать прокрутку на window
вместо document
. Попробуйте это:
$(document).ready(function() {
var $header = $("#header");
$(window).scroll(function() {
$header.toggleClass('headerScrolled', $(this).scrollTop() !== 0);
});
});
html,
body {
height: 1000px;
margin: 0;
}
#header {
padding: 25px 0;
background-color: #CCC;
width: 100%;
position: fixed;
}
#header.headerScrolled {
padding: 15px 0;
}
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<div id="header">
Header
</div>
Комментарии:
1. Это решение будет продолжать переключать
headerScrolled
класс в заголовке по мере прокрутки содержимого2. Это не так. Я добавил фрагмент для демонстрации
3. Как обычно, потрясающе, никогда не знал, что вы можете передать bool в toggleClass, с этого момента многое станет намного проще!
4. То же самое. Пожалуйста, отредактируйте это, чтобы включить инструкции по использованию метода прокрутки
window
вместоthis
, и я проголосую за и удалю свой ответ.5. Вам нужно сделать
.headerScrolled
селектор более конкретным, чтобы переопределить любой существующий стиль элемента. Вот почему я включил#header
в этот селектор.
Ответ №2:
Используйте .scroll()
метод на window
, а не this
или document
на. Кроме того, это может быть проще в использовании .addClass()
и .removeClass()
в этом случае.
$(document).ready(function() {
var $header = $("#header");
$(window).scroll(function() {
if (!$(window).scrollTop()) {
$header.addClass("headerScrolled");
} else {
$header.removeClass("headerScrolled");
}
});
});
Комментарии:
1. Это решение будет продолжать переключать класс в #header