Javascript.RU

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

В моем примере после каждого .container стоит <div style="height: 1000px"></div>, показывающий то, что в этой области у навигации .nav должен быть убран класс .active
Ответить с цитированием
  #12 (permalink)  
Старый 16.06.2020, 16:44
Аватар для webgraph
Профессор
Отправить личное сообщение для webgraph Посмотреть профиль Найти все сообщения от webgraph
 
Регистрация: 14.11.2014
Сообщений: 186

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

и класс .active нужно добавлять не к .container , а к .nav !)))
Ответить с цитированием
  #14 (permalink)  
Старый 16.06.2020, 17:07
Профессор
Отправить личное сообщение для Nexus Посмотреть профиль Найти все сообщения от Nexus
 
Регистрация: 04.12.2012
Сообщений: 3,791

Сообщение от webgraph
и класс .active нужно добавлять не к .container , а к .nav !)))
Сами.

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

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

<script>
    const navHeight = document.querySelector('nav').offsetHeight;
    
    window.addEventListener('scroll', function () {
        document.querySelectorAll('.container').forEach(function (node) {
            const rect = node.getBoundingClientRect();
            
            if (rect.y >= -rect.height && rect.y <= navHeight) {
                node.classList.add('active');
            } else {
                node.classList.remove('active');
            }
        });
    });
</script>
Ответить с цитированием
  #15 (permalink)  
Старый 16.06.2020, 17:26
Аватар для webgraph
Профессор
Отправить личное сообщение для webgraph Посмотреть профиль Найти все сообщения от webgraph
 
Регистрация: 14.11.2014
Сообщений: 186

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

Чтобы получилось в итоге так:
<style>
.nav{
   background: red;
}
.nav.active{
   background: blue;
}
</style>
Ответить с цитированием
  #17 (permalink)  
Старый 16.06.2020, 19:06
Аватар для рони
Профессор
Отправить личное сообщение для рони Посмотреть профиль Найти все сообщения от рони
 
Регистрация: 27.05.2010
Сообщений: 33,105

scroll добавление класса при пересечении блоков
webgraph,
при условии строки 21 top: 0;
<!doctype html>
<html lang="ru">
<head>
    <meta charset="UTF-8">
    <title>Document</title>
</head>
<body>
<nav class="nav"></nav>

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

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


</style>

<script>
    const nav = document.querySelector('nav');
    const navHeight = nav.offsetHeight;
    const boxs = Array.from(document.querySelectorAll('.container'));
    const navAddCls = () => {
        const add = boxs.some(box => {
        const rect = box.getBoundingClientRect();
        const y = rect.bottom / (navHeight + rect.bottom - rect.top);
        return y > 0 && y < 1;
        })
        nav.classList.toggle('active', add)
    }
    window.addEventListener('scroll', navAddCls);
    navAddCls()
</script>

</body>
</html>
Ответить с цитированием
  #18 (permalink)  
Старый 16.06.2020, 19:50
Аватар для webgraph
Профессор
Отправить личное сообщение для webgraph Посмотреть профиль Найти все сообщения от webgraph
 
Регистрация: 14.11.2014
Сообщений: 186

воооо!!)) превосходно!)) великая благодарность тебе! )) потрясающий код! гениально))
Ответить с цитированием
Ответ



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

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


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Позиция элемента страницы при скроллинге. 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