#javascript #html #css
Вопрос:
У меня есть веб-сайт (https://lunarcreator.uk ). Я создал для него панель навигации, которая изменяется за пределы определенного смещения y (> amp; < 100), чтобы она была видна на фоне и содержимом во время прокрутки.
Для этого у меня есть следующий javascript:
const logo = document.querySelector('#pronav')
const about = document.querySelector('#about')
const log_text = document.querySelector('#log_text')
const link1 = document.querySelector('#link1')
const link2 = document.querySelector('#link2')
const link3 = document.querySelector('#link3')
const getOffset = () => {
if(window.pageYOffset > 100){
logo.style.backgroundColor = 'white';
logo.style.transition = 'background .2s ease-out';
log_text.style.color = 'black';
link1.style.color = 'black';
link2.style.color = 'black';
link3.style.color = 'black';
}
if(window.pageYOffset < 100){
logo.style.backgroundColor = 'rgba(0,0,0,0)';
logo.style.transition = 'background .2s ease-out';
log_text.style.color = 'white';
link1.style.color = 'white';
link2.style.color = 'white';
link3.style.color = 'white';
}
}
window.addEventListener('scroll', getOffset)
константа link_n ссылается на конкретный тег a в панели навигации. Однако, добавив это изменение при прокрутке, я потерял функциональность тегов a, имеющих эффект наведения при прокрутке. Я попытался указать наведение курсора мыши в css с помощью :hover, но это не сработало. Как я мог это исправить?
Спасибо, что уделили мне время. (у меня очень мало знаний в javascript, поэтому я думаю, что это было лучшее место для ответов)
Комментарии:
1. почему бы просто не переключить класс?
2. что, если window.pageYOffset равен ровно 100?
3. Извините, это операция на другой учетной записи — ничего не происходит, когда оно ровно 100 (например, у меня никогда не возникало никаких проблем)
Ответ №1:
Было бы намного лучше просто добавить class в ваш заголовок после прокрутки.
let header = document.querySelector('.header');
const getOffset = () => {
if(window.pageYOffset > 100){
header.classList.add('fixed');
}
else {
header.classList.remove('fixed');
}
}
window.addEventListener('scroll', getOffset)
И чем редактировать стили на основе класса заголовка.
.header a {
color: #FFF;
}
.header.fixed {
background: #fff;
}
.header.fixed a {
color: #000;
}
.header.fixed a:hover {
color: blue;
}
Вот скрипка: https://jsfiddle.net/oLtvjwhe /
Редактировать: Избегайте использования !важно, что предложил Аллан.
Даже в w3schools это написано внизу «Совет: полезно знать о !важное правило, вы можете увидеть его в каком-нибудь исходном коде CSS. Однако не используйте его, если вам это абсолютно необходимо.» И в этом случае вам не нужно !важно.
Комментарии:
1. Привет! Спасибо за ответ! Я попробую утром: D (все еще работает с другой учетной записью)
Ответ №2:
Используйте CSS !важное правило https://www.w3schools.com/css/css_important.asp
Нравится:
.menu a:hover,
.show-menu-btn:hover,
.hide-menu-btn:hover {
color: #AEC6CF !important;
}
Надеюсь, это сработает.
Ответ №3:
рассмотрите возможность таргетинга на родительский класс #pronav
. Затем просто добавьте fade-to-white
к нему класс:
const FADE_TO_WHITE = 'fade-to-white'
const pronav = document.querySelector('#pronav')
const getOffset = () => {
window.pageYOffset > 100
? pronav.classList.add(FADE_TO_WHITE)
: pronav.classList.remove(FADE_TO_WHITE)
}
затем настройте дочерние элементы с помощью css:
#pronav.fade-to-white a {
color: black;
}
#pronav a {
color: white;
}
#pronav.fade-to-white a:hover {
color: blue; /* change this */
}
/* continue like this */
Комментарии:
1. Привет! Спасибо за ответ! Я попробую утром: D (все еще работает с другой учетной записью)