Переход на переход
Я новичок в jQuery, и я учусь, когда я ухожу, но изо всех сил пытаюсь понять, как указать, что при прокрутке белый фон навигации перемещается вверх, чтобы отобразить белый текст навигации на панели 1?
bartaile.com - это то, что я использую в качестве вдохновения, и изменения, которые я делаю для навигации на бартах, --- --- после того, как пользователь прокручивает первую панель, навигация скрывается, только когда пользователь выполняет прокрутку, появляется навигационное шоу снова, когда панель 1 возвращается назад, белые переходы навигации скользят вверх, чтобы скрыть и отобразить белый текст.
Любая помощь или советы, чтобы узнать, как это сделать, будем очень благодарны!: -)
var lastScrollTop = 0;
$(window).on('scroll', function() {
var header = $('.header');
var stage0 = $('.stage-0');
var scrollTop = $(window).scrollTop();
if (scrollTop > lastScrollTop) {
// down scroll
if (scrollTop > stage0.offset().top + stage0.height()) {
header.addClass('hide');
}
} else {
// up scroll
if (scrollTop <= stage0.offset().top + stage0.height()) {
header.removeClass('headerBGchange headerLIchange');
} else {
header.removeClass('hide').addClass('headerBGchange headerLIchange BGupTranistion');
}
}
lastScrollTop = scrollTop;
});
.header {
display: -webkit-box;
display: -webkit-flex;
display: -ms-flexbox;
display: flex;
-webkit-box-align: center;
-webkit-align-items: center;
-ms-flex-align: center;
align-items: center;
height: 80px;
-webkit-transition: top .5s ease;
transition: top .5s ease;
position: fixed;
width: 100%;
top: 0;
background-color: transparent;
overflow: hidden;
}
.header ul {
margin: 20px;
padding: 0;
}
.header ul li {
display: inline-block;
margin-right: 20px;
color: white;
}
.header ul li:last-child {
margin-right: 0;
}
.hide {
top: -80px;
}
.headerBGchange {
Background: white;
}
.BGupTranistion {
}
.header.headerLIchange ul li {
color: Blue;
}
.header.headerLIchange {
border-bottom: 1px solid black;
}'
</style>
<!--stage style--><style>
.stage {
color: #fff;
display: -webkit-box;
display: -webkit-flex;
display: -ms-flexbox;
display: flex;
-webkit-box-pack: center;
-webkit-justify-content: center;
-ms-flex-pack: center;
justify-content: center;
-webkit-box-align: center;
-webkit-align-items: center;
-ms-flex-align: center;
align-items: center;
height: 100vh;
background-color: white;
border-bottom: 1px solid black;
font-size: 48px;
height: 200px;
width: 100%;
}
.stage-0 {
background: grey;
}
.stage-24 {
background: #433937;
}
<script src="//ajax.googleapis.com/ajax/libs/jquery/1.10.2/jquery.min.js"></script>
<div class="header">
<ul>
<li>Home</li>
<li>About</li>
<li>Contact</li>
</ul>
</div>
<div class="stage stage-0">1</div>
<div class="stage stage-2">3</div>
<div class="stage stage-4">5</div>
<div class="stage stage-6">7</div>
<div class="stage stage-8">9</div>
<div class="stage stage-10">11</div>
<div class="stage stage-12">13</div>
<div class="stage stage-14">15</div>
<div class="stage stage-16">17</div>
<div class="stage stage-18">19</div>
<div class="stage stage-20">21</div>
<div class="stage stage-22">23</div>
Ответы
Ответ 1
Вам нужно будет добавить еще один контейнер для достижения эффекта, который вы ищете. То, что вы, по сути, хотите иметь, это контейнер вверху и другой контейнер, который будет исчезать и исчезать в зависимости от вашего поведения прокрутки. Итак, как вы это достигаете? Создайте -Element на верхней части страницы, например, на вашем сером поле. При прокрутке вниз, не превращайте его, вместо этого исчезайте в другом ранее скрытом контейнере, чтобы действовать как ваша навигация, когда не вверху страницы. Теперь, если вы прокрутите резервную копию, проверьте местоположение прокрутки, и если два местоположения обоих контейнеров перекрываются, начните исчезать контейнер, который вы используете, когда он не находится в верхней части страницы. Я не думаю, что есть другое решение. Я могу попробовать написать код на нем сейчас, я отредактирую свой пост, если бы у меня был успех. Вы также можете попробовать работать с другим div внутри фактического заголовка и z-индекса, хотя это может оказаться очень плохо.
Я сделал все возможное, чтобы добиться того, чего вы хотите. Вот CodePen.
Я использовал два разных div, один из которых называется .dynamic-header и один обычный заголовок, и я добавил функцию для обнаружения jQuery In-Viewport.
$.fn.isOnScreen = function(){
var element = this.get(0);
var bounds = element.getBoundingClientRect();
return bounds.top < window.innerHeight && bounds.bottom > 0;
}
Я надеюсь, что это соответствует вашим потребностям. Кроме того, я изменил некоторые CSS, используя Top-Property для перехода. Вы можете передать все это на классы CSS и использовать их вместо этого, но я подумал, что это самое простое решение для демонстрационных целей. Это то, что вы хотите?
Изменить 1. В качестве примера вы назвали bartaile.com. Я взглянул на эффект, который они создают и воссоздал. Что вам нужно сделать, так это создать такую структуру:
<div class="header-bg"></div>
<div class="header-content">
<ul>
<li>YOUR HEADER</li>
</ul>
</div>
Я сделал для этого CodePen.
Заголовок-bg имеет высоту 0. Содержимое заголовка имеет высоту, скажем, 80px и цвет фона прозрачного. Теперь НЕ проверяйте, в каком направлении прокручивается. Единственным важным аспектом эффекта является то, насколько далеко вы от вершины/являетесь конкретным элементом в видовом экране? Я пошел за 400px
сверху. Теперь, когда это требование выполняется, просто затухайте в заголовке-bg. Он будет заключен между оберткой и содержимым и предоставит фон. Вместе с тем вы также можете изменить цвет содержимого заголовка, но я этого не делал. Это то, что делает bartaile.com, tho, поэтому вы можете включить его. Наслаждайтесь!
Изменить 2. Я редактировал CodePen в соответствии с вашими комментариями. См. Это в действии здесь. Это делает следующее: заголовок есть. При прокрутке вниз он исчезнет. При прокрутке вверх он откроет фон, но при прокрутке, чтобы scrollTop < 400, фон будет исчезать. Насколько я понял, это то, что вы хотите. Он использует структуру, опубликованную выше.
Ответ 2
Я проверяю "bartaile.com", и я должен указать, что они используют сторонний lib, называемый "fullpage". Если вы хотите достичь такого эффекта, вы должны проверить этот lib fullpage.js. Это простой и простой в использовании плагин для создания полноэкранных прокручивающих веб-сайтов (также известных как веб-сайты одной страницы или сайты с одной страницей). Это позволяет создавать полноэкранные прокручивающие веб-сайты, а также добавлять некоторые ландшафтные слайдеры внутри разделов сайта.
Этот плагин может обрабатывать "полноэкранную прокрутку", а также обычную прокрутку. Вы можете добиться своего эффекта с помощью этого гораздо более легкого