Javascript.RU

Создать новую тему Ответ
 
Опции темы Искать в теме
  #1 (permalink)  
Старый 01.10.2021, 16:52
Аспирант
Отправить личное сообщение для Alexprom Посмотреть профиль Найти все сообщения от Alexprom
 
Регистрация: 19.09.2018
Сообщений: 60

Липкий блок когда другой клас скрылся из виду
Здравствуйте!
Искал примеры, но гугл меня явно не понимает...
Ищу липкий блок который покажется только тогда, когда нужный клас скрылся из виду при скролле.
Может у кого-то есть что-то подобное?

Вот нашел пример, но он показывает липкий блок только при подходе к нужному классу.

<!DOCTYPE html>

<html>
<head>
    <title>Untitled</title>
    <meta charset="utf-8">
    <style type="text/css">
    p{
        height: 500px;
    }
    #oct-slide-panel-mobile{
        position: fixed;
        display: none;
    }
    #oct-slide-panel-mobile.show{
        display: block;
    }

    </style>

    <script>
document.addEventListener('DOMContentLoaded', function() {
            let panel = document.querySelector('#oct-slide-panel-mobile');
            const lazyShow = btns => {
                btns.forEach(({intersectionRatio})  => {
                    panel.classList.toggle('show', intersectionRatio < .3);
                });
            };
            let observer = new IntersectionObserver(lazyShow, {
                rootMargin: "10px",
                threshold: [.3]
            });
            document.querySelectorAll('.btn').forEach(elem => observer.observe(elem));
       });
    </script>
</head>

<body>
<div id="oct-slide-panel-mobile">вижу кнопу</div>
<p></p>
<button class="btn">кнопа</button>
<p></p>
</body>
</html>

Последний раз редактировалось Alexprom, 01.10.2021 в 18:46.
Ответить с цитированием
  #2 (permalink)  
Старый 01.10.2021, 17:22
Аватар для рони
Профессор
Отправить личное сообщение для рони Посмотреть профиль Найти все сообщения от рони
 
Регистрация: 27.05.2010
Сообщений: 33,123

Alexprom,
строка 39 исправить селектор, строка 26 повернуть знак сравнения и будет вам счастье, и run добавьте в [html run]
Ответить с цитированием
  #3 (permalink)  
Старый 01.10.2021, 18:47
Аспирант
Отправить личное сообщение для Alexprom Посмотреть профиль Найти все сообщения от Alexprom
 
Регистрация: 19.09.2018
Сообщений: 60

Сообщение от рони Посмотреть сообщение
Alexprom,
строка 39 исправить селектор, строка 26 повернуть знак сравнения и будет вам счастье, и run добавьте в [html run]
Что-то неправильно работает
Ответить с цитированием
  #4 (permalink)  
Старый 01.10.2021, 18:48
Аватар для рони
Профессор
Отправить личное сообщение для рони Посмотреть профиль Найти все сообщения от рони
 
Регистрация: 27.05.2010
Сообщений: 33,123

когда элемент скрыт
Alexprom,
что не так?
<!DOCTYPE html>

<html>
<head>
    <title>Untitled</title>
    <meta charset="utf-8">
    <style type="text/css">
    p{
        height: 500px;
    }
    #oct-slide-panel-mobile{
        position: fixed;
        display: none;
    }
    #oct-slide-panel-mobile.show{
        display: block;
    }

    </style>

    <script>
document.addEventListener('DOMContentLoaded', function() {
            let panel = document.querySelector('#oct-slide-panel-mobile');
            const lazyShow = btns => {
                btns.forEach(({intersectionRatio})  => {
                    panel.classList.toggle('show', intersectionRatio <= .1);
                });
            };
            let observer = new IntersectionObserver(lazyShow, {
                rootMargin: "10px",
                threshold: [.1]
            });
            document.querySelectorAll('.btn').forEach(elem => observer.observe(elem));
       });
    </script>
</head>

<body>
<div id="oct-slide-panel-mobile">кнопы нет</div>
<p></p>
<button class="btn">кнопа</button>
<p></p>
</body>
</html>
Ответить с цитированием
  #5 (permalink)  
Старый 01.10.2021, 18:51
Аватар для рони
Профессор
Отправить личное сообщение для рони Посмотреть профиль Найти все сообщения от рони
 
Регистрация: 27.05.2010
Сообщений: 33,123

Alexprom,
или совсем скрыт )))
document.addEventListener('DOMContentLoaded', function() {
            let panel = document.querySelector('#oct-slide-panel-mobile');
            const lazyShow = btns => {
                btns.forEach(({intersectionRatio})  => {
                    panel.classList.toggle('show', intersectionRatio == 0);
                });
            };
            let observer = new IntersectionObserver(lazyShow, {
                rootMargin: "0px",
                threshold: [0]
            });
            document.querySelectorAll('.btn').forEach(elem => observer.observe(elem));
       });
Ответить с цитированием
  #6 (permalink)  
Старый 01.10.2021, 21:29
Аспирант
Отправить личное сообщение для Alexprom Посмотреть профиль Найти все сообщения от Alexprom
 
Регистрация: 19.09.2018
Сообщений: 60

Рони, большое вам спасибо!
Ответить с цитированием
Ответ



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

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


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Липкий блок после определенного класса Alexprom Общие вопросы Javascript 6 23.07.2021 20:14
Как переместить содержимое блока в другой блок? Vladislav Общие вопросы Javascript 7 06.12.2015 17:22
Форма с чекбоксом, как вывести данные в другой блок tatynechka jQuery 1 15.04.2015 15:15
Как определить, что блок скрылся за нижней границей окна? foreach jQuery 12 15.02.2013 20:19
Отрыть DIV блок при переходе с другой страницы BuTbka Общие вопросы Javascript 7 08.04.2009 22:59