Javascript-форум (https://javascript.ru/forum/)
-   Общие вопросы Javascript (https://javascript.ru/forum/misc/)
-   -   Как сделать чтобы при прокрутке элемент изменялся (https://javascript.ru/forum/misc/71219-kak-sdelat-chtoby-pri-prokrutke-ehlement-izmenyalsya.html)

Zombie_Killer 02.11.2017 19:06

Как сделать чтобы при прокрутке элемент изменялся
 
Привет! У меня есть меню, которая находится сверху сайте. Оно зафиксировано. Я хочу чтобы при прокрутке цвет текста и фон изменялся, а если элемент вновь находится вверху то все делалось обратно. Желательно с комментариями. Заранее спасибо!

ruslan_mart 02.11.2017 19:23

<div class="menu"></div>


.menu.fixed {
    left: 0;
    position: fixed;
    top: 0;
}


var menu = document.querySelector('.menu');
var menuIsFixed = false;
var top = 100; //При какой позиции фиксировать

window.addEventListener('scroll', function() {
	if(window.pageYOffset > top !== navMenuIsFixed) {
		menuIsFixed = !menuIsFixed;
		menu.classList[menuIsFixed ? 'add' : 'remove']('fixed');
	}
});

Zombie_Killer 02.11.2017 19:29

Цитата:

Сообщение от ruslan_mart (Сообщение 468974)
<div class="menu"></div>


.menu.fixed {
    left: 0;
    position: fixed;
    top: 0;
}


var menu = document.querySelector('.menu');
var menuIsFixed = false;
var top = 100; //При какой позиции фиксировать

window.addEventListener('scroll', function() {
	if(window.pageYOffset > top != navMenuIsFixed) {
		menuIsFixed = !menuIsFixed;
		menu.classList[menuIsFixed? 'add' : 'remove']('fixed');
	}
});

8 строчка мне не понятна, как и последняя

Rasy 02.11.2017 19:55

Цитата:

Сообщение от Zombie_Killer
8 строчка мне не понятна,

А так?

if (menuIsFixed) {
	menu.classList.add('fixed');
} else {
	menu.classList.remove('fixed');
}

Zombie_Killer 02.11.2017 20:02

спасибо
но чето не работает(

Nexus 02.11.2017 20:12

Zombie_Killer, вероятно работает, просто вы от него не того ждете.
Код, что ruslan_mart написал не решает вашей задачи.
Он при скролле страницы добавляет элементу с классом "menu" класс "fixed", если пользователь проскроллил от 100 и больше пикселей и удаляет этот класс, если пользователь вернулся в начало страницы.
Чтобы при каждом скролле не добавлять/удалять класс у элемента была использована переменная, которая хранит состояние наличия класса "fixed" у ".menu".

Rasy 02.11.2017 20:18

Цитата:

Сообщение от Nexus
Код, что ruslan_mart написал не решает вашей задачи.

Тут ведь только изменить декларации в цсс классе на нужные и переменной top подходящий брейкпоинт. Любой класс туглить.
.is-color {
  color: black;
  background-color: orange;      
}

ruslan_mart 03.11.2017 07:37

Цитата:

Сообщение от Rasy
А так?

Можно ещё вот так:

menu.classList.toggle('fixed', menuIsFixed);


Но это решение меньше поддерживается браузерами :)

Цитата:

Сообщение от Nexus
Код, что ruslan_mart написал не решает вашей задачи.

Вы абсолютно правы. Этот кусок кода я писал очень давно, просто скопировал и вставил сюда. Но суть, как подчеркнул Rasy, та же. Нужно просто поменять стили/класс под себя.


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