Javascript-форум (https://javascript.ru/forum/)
-   Общие вопросы Javascript (https://javascript.ru/forum/misc/)
-   -   Липкий блок когда другой клас скрылся из виду (https://javascript.ru/forum/misc/83152-lipkijj-blok-kogda-drugojj-klas-skrylsya-iz-vidu.html)

Alexprom 01.10.2021 16:52

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

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

<!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>

рони 01.10.2021 17:22

Alexprom,
строка 39 исправить селектор, строка 26 повернуть знак сравнения и будет вам счастье, и run добавьте в [html run]

Alexprom 01.10.2021 18:47

Цитата:

Сообщение от рони (Сообщение 540484)
Alexprom,
строка 39 исправить селектор, строка 26 повернуть знак сравнения и будет вам счастье, и run добавьте в [html run]

Что-то неправильно работает

рони 01.10.2021 18:48

когда элемент скрыт
 
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>

рони 01.10.2021 18:51

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));
       });

Alexprom 01.10.2021 21:29

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


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