Javascript.RU

Создать новую тему Ответ
 
Опции темы Искать в теме
  #1 (permalink)  
Старый 16.06.2020, 11:40
Аватар для webgraph
Профессор
Отправить личное сообщение для webgraph Посмотреть профиль Найти все сообщения от webgraph
 
Регистрация: 14.11.2014
Сообщений: 186

Как изменять класс элемента при скроллинге?
Как сделать, чтобы при перекрытии навигацией блока container к навигации добавлялся класс active? на чистом js

<!DOCTYPE html>
<html>

<body>

<nav class="nav" style="display: fixed;"></nav>

<section class="container"></section>
<div style="height: 1000px"></div>

<section class="container"></section>
<div style="height: 1000px"></div>

<section class="container"></section>
<div style="height: 1000px"></div>



<script>
var nav = document.querySelector('.nav');
    function navGallery(){
        let containers = document.getElementsByClassName('container');

        for(var i = 0; i < containers.length; i++){
            let container = containers[i].getBoundingClientRect();
            
            //если контейнер находится под блоком навигации, то добавляем ему класс active
            if(container.top < 0 && container.bottom > 0){
                nav.classList.add('active');
            } else {
                nav.classList.remove('active');
            }
        }
    }
    navGallery();
    window.addEventListener('scroll', navGallery);
</script>

</body>
</html>

Последний раз редактировалось webgraph, 16.06.2020 в 13:12.
Ответить с цитированием
  #2 (permalink)  
Старый 16.06.2020, 11:50
Аватар для рони
Профессор
Отправить личное сообщение для рони Посмотреть профиль Найти все сообщения от рони
 
Регистрация: 27.05.2010
Сообщений: 33,072

webgraph,
может сделать полноценный макет и чем не устроил код, тот что вы показали, в первом сообщении.
например:
[html run]
... минимальный код страницы с вашей проблемой
[/html]

О том, как вставить в сообщение исполняемый javascript и html-код, а также о дополнительных возможностях форматирования - читайте http://javascript.ru/formatting.
Ответить с цитированием
  #3 (permalink)  
Старый 16.06.2020, 11:55
Аватар для webgraph
Профессор
Отправить личное сообщение для webgraph Посмотреть профиль Найти все сообщения от webgraph
 
Регистрация: 14.11.2014
Сообщений: 186

суть в том, что из-за нескольких блоков с классом container скрипт добавляет класс к навигации и сразу же его удаляет. если добавлять класс непосредственно к самому блоку, который в зоне видимости - то класс добавляется. но нужно сделать, чтобы добавлялся класс к блоку навигации.
Ответить с цитированием
  #4 (permalink)  
Старый 16.06.2020, 12:21
Аватар для рони
Профессор
Отправить личное сообщение для рони Посмотреть профиль Найти все сообщения от рони
 
Регистрация: 27.05.2010
Сообщений: 33,072

webgraph,
не понимаю, что вы хотите сделать и в чём у вас проблема.
Ответить с цитированием
  #5 (permalink)  
Старый 16.06.2020, 12:30
Аватар для webgraph
Профессор
Отправить личное сообщение для webgraph Посмотреть профиль Найти все сообщения от webgraph
 
Регистрация: 14.11.2014
Сообщений: 186

когда пользователь доходит до блока с классом container, нужно навигации nav добавить класс active.
Ответить с цитированием
  #6 (permalink)  
Старый 16.06.2020, 12:44
Аватар для webgraph
Профессор
Отправить личное сообщение для webgraph Посмотреть профиль Найти все сообщения от webgraph
 
Регистрация: 14.11.2014
Сообщений: 186

А проблема заключается в том, что класс добавляется к навигации nav, но и сразу же удаляется.
Ответить с цитированием
  #7 (permalink)  
Старый 16.06.2020, 15:38
Профессор
Отправить личное сообщение для Nexus Посмотреть профиль Найти все сообщения от Nexus
 
Регистрация: 04.12.2012
Сообщений: 3,730

<nav class="nav"></nav>
 
<section class="container" style="height: 1000px; background: green"></section>
<section class="container" style="height: 1000px; background: yellow"></section>
<section class="container" style="height: 1000px; background: blue"></section>

<style>
    nav {
      background: red;
      position: fixed;
      top: 0;
      left: 0;
      height: 50px;
      width: 100%;
      z-index: 1;
    }
    
    .active {
        opacity: 0.25;
    }
</style>

<script>
    var observer = new IntersectionObserver(function(entries, observer) {
      entries.forEach(function (entry) {
        entry.target.classList[entry.isIntersecting ? 'add' : 'remove']('active');
      });
    }, {threshold: 0.25});

    document.querySelectorAll('.container').forEach(function(node) {
      observer.observe(node);
    });
</script>
Ответить с цитированием
  #8 (permalink)  
Старый 16.06.2020, 16:29
Аватар для webgraph
Профессор
Отправить личное сообщение для webgraph Посмотреть профиль Найти все сообщения от webgraph
 
Регистрация: 14.11.2014
Сообщений: 186

а где в скрипте какая-либо отсылка к навигации nav ? скрипт не работает
Ответить с цитированием
  #9 (permalink)  
Старый 16.06.2020, 16:33
Аватар для webgraph
Профессор
Отправить личное сообщение для webgraph Посмотреть профиль Найти все сообщения от webgraph
 
Регистрация: 14.11.2014
Сообщений: 186

и суть-то главная в том, что класс добавляется именно тогда, когда .container находится под .nav, а не просто в зоне видимости.
Ответить с цитированием
  #10 (permalink)  
Старый 16.06.2020, 16:37
Профессор
Отправить личное сообщение для Nexus Посмотреть профиль Найти все сообщения от Nexus
 
Регистрация: 04.12.2012
Сообщений: 3,730

Сообщение от webgraph
скрипт не работает
Сочувствую, у меня все работает.

Сообщение от webgraph
и суть-то главная в том, что класс добавляется именно тогда, когда .container находится под .nav, а не просто в зоне видимости.
Насколько я понял по «display: fixed», у вас атрибут nav должен быть «плавающий», поэтому любой «container» на странице всегда находится под «nav».
Ответить с цитированием
Ответ



Опции темы Искать в теме
Искать в теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Позиция элемента страницы при скроллинге. LLIypuk jQuery 4 15.03.2018 10:37
Как скрыть класс при повторном нажатии на главный пункт меню? dred_01 Элементы интерфейса 1 23.11.2017 22:21
Как при добавлении или клонировании элемента добавить плейсхолдер с увеличивающейся ц Fierfoxik Общие вопросы Javascript 2 04.05.2016 17:57
Скрипт при нахождение элемента добавляется класс, анимация Wahlberg Angular.js 0 02.02.2014 02:44
Изменение стиля родительского элемента при :hover дочернего lanzs Элементы интерфейса 2 16.10.2010 13:28