Javascript.RU

Создать новую тему Ответ
 
Опции темы Искать в теме
  #1 (permalink)  
Старый 07.09.2021, 13:34
Профессор
Отправить личное сообщение для Сергей Ракипов Посмотреть профиль Найти все сообщения от Сергей Ракипов
 
Регистрация: 01.06.2010
Сообщений: 668

Определение расстояние от края браузера и элемента
Я помню что уже делал такой скрипт но не могу найти, пробую по памяти сделать все не работает.

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

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
    <style>
        header{
            height: 200px;
        
        }
        footer{
            height: 1000px;
        }
        .blok{
            width: 80px;
            height: 80px;
            background-color:#000;
            background-image: url(https://rakipov.ru/files/tsifra1.svg);
            background-repeat: no-repeat;
            background-position: center;
            background-size: 70%;
            border-radius: 7px;
        }
        .blok2{
            width: 80px;
            height: 80px;
            background-color:#000;
            background-image: url(https://rakipov.ru/files/icon1.svg);
            background-repeat: no-repeat;
            background-position: center;
            background-size: 70%;
            border-radius: 7px;
        }
    </style>
</head>
<body>
    <header></header>
    <section>
        <div class="blok"></div>
    </section>
    <footer></footer>
    <script>
        const blok = document.querySelector(".blok");

        let anim1 = () => {
            let ikonka1 = tsifra1.getBoundingClientRect();
            if (ikonka1.top >= 100) {
                blok.classList.add("blok2");
            }
        };
        window.addEventListener("scroll", anim1);
    </script>
</body>
</html>
Ответить с цитированием
  #2 (permalink)  
Старый 07.09.2021, 14:06
Профессор
Отправить личное сообщение для Сергей Ракипов Посмотреть профиль Найти все сообщения от Сергей Ракипов
 
Регистрация: 01.06.2010
Сообщений: 668

Вспомнил еще вот тко вариант и тоже не сработало

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
    <style>
        header{
            height: 500px;
        
        }
        footer{
            height: 1500px;
        }
        .blok{
            width: 80px;
            height: 80px;
            background-color:#000;
            background-image: url(https://rakipov.ru/files/tsifra1.svg);
            background-repeat: no-repeat;
            background-position: center;
            background-size: 70%;
            border-radius: 7px;
        }
        .blok2{
            width: 80px;
            height: 80px;
            background-color:#000;
            background-image: url(https://rakipov.ru/files/icon1.svg);
            background-repeat: no-repeat;
            background-position: center;
            background-size: 70%;
            border-radius: 7px;
        }
    </style>
</head>
<body>
    <header></header>
    <section>
        <div class="blok"></div>
    </section>
    <footer></footer>
    <script>
        const blok = document.querySelector(".blok");

        let anim1 = () => {
            if (pos >= 100) {
                blok.style.backgroundImage = "url('https://rakipov.ru/files/icon1.svg')";
            }
            console.log(blok.offsetTop);
        };
        window.addEventListener("scroll", anim1);
    </script>
</body>
</html>
Ответить с цитированием
  #3 (permalink)  
Старый 07.09.2021, 14:13
Аватар для Aetae
Тлен
Отправить личное сообщение для Aetae Посмотреть профиль Найти все сообщения от Aetae
 
Регистрация: 02.01.2010
Сообщений: 6,590

Код не глядел, мож потом, но сходу могу сказать, что сейчас такие задачи решаются через Intersection Observer.)
__________________
29375, 35
Ответить с цитированием
  #4 (permalink)  
Старый 07.09.2021, 15:05
Аватар для рони
Профессор
Отправить личное сообщение для рони Посмотреть профиль Найти все сообщения от рони
 
Регистрация: 27.05.2010
Сообщений: 33,126

Сообщение от Сергей Ракипов
не работает
tsifra1 что это? строка 48 код 1

pos что это? строка 48 код 2
Ответить с цитированием
  #5 (permalink)  
Старый 07.09.2021, 15:07
Аватар для рони
Профессор
Отправить личное сообщение для рони Посмотреть профиль Найти все сообщения от рони
 
Регистрация: 27.05.2010
Сообщений: 33,126

Сергей Ракипов,
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
    <style>
        header{
            height: 200px;

        }
        footer{
            height: 1000px;
        }
        .blok{
            width: 80px;
            height: 80px;
            background-color:#D3D3D3;
            background-image: url(https://rakipov.ru/files/tsifra1.svg);
            background-repeat: no-repeat;
            background-position: center;
            background-size: 70%;
            border-radius: 7px;
        }
        .blok.blok2{
            width: 80px;
            height: 80px;
            background-color:#000;
            background-image: url(https://rakipov.ru/files/icon1.svg);
            background-repeat: no-repeat;
            background-position: center;
            background-size: 70%;
            border-radius: 7px;
        }
    </style>
</head>
<body>
    <header></header>
    <section>
        <div class="blok"></div>
    </section>
    <footer></footer>
    <script>
        const blok = document.querySelector(".blok");

        let anim1 = () => {
            let ikonka1 = blok.getBoundingClientRect();
            blok.classList.toggle("blok2", ikonka1.top >= 100);
        };
        window.addEventListener("scroll", anim1);
        anim1(); 
    </script>
</body>
</html>

Последний раз редактировалось рони, 07.09.2021 в 18:09. Причина: добавлено для начальной установки anim1();
Ответить с цитированием
  #6 (permalink)  
Старый 07.09.2021, 17:06
Профессор
Отправить личное сообщение для Сергей Ракипов Посмотреть профиль Найти все сообщения от Сергей Ракипов
 
Регистрация: 01.06.2010
Сообщений: 668

рони,
Спасибо завтра сяду разбираться.

Aetae,
А этот способ чем лучше?
Ответить с цитированием
  #7 (permalink)  
Старый 08.09.2021, 09:25
Профессор
Отправить личное сообщение для Сергей Ракипов Посмотреть профиль Найти все сообщения от Сергей Ракипов
 
Регистрация: 01.06.2010
Сообщений: 668

рони,
Видимо к вечеру вчера устал и наделал кучу ошибок. Сейчас все понятно.
Вопрос а если мне нужно учитывать ширину браузера и в зависимости от ширины браузера делать другие значение от высоты экрана, к примеру top не 100 а 300 если ширина экрана 320

То мне нужно использовать window.innerwidth, но мне нужно это прямо в той функции писать или отдельно?
Ответить с цитированием
  #8 (permalink)  
Старый 08.09.2021, 09:27
Профессор
Отправить личное сообщение для Сергей Ракипов Посмотреть профиль Найти все сообщения от Сергей Ракипов
 
Регистрация: 01.06.2010
Сообщений: 668

Aetae,
Я прочитал о преимуществах, а есть какой то рабочий пример что бы так сказать разбираться методом тыка, мне сложно в тексте все понимать мне нужно менять пробовать тогда я лучше понимаю
Ответить с цитированием
  #9 (permalink)  
Старый 08.09.2021, 10:03
Профессор
Отправить личное сообщение для Сергей Ракипов Посмотреть профиль Найти все сообщения от Сергей Ракипов
 
Регистрация: 01.06.2010
Сообщений: 668

Я все правильно сделал или можно лучше или что то не учел?
Должно работать что если ширина такая то то значение высоты такое то.

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
    <style>
        header{
            height: 500px;

        }
        footer{
            height: 1000px;
        }
        .blok{
            width: 80px;
            height: 80px;
            background-color:#D3D3D3;
            background-image: url(https://rakipov.ru/files/tsifra1.svg);
            background-repeat: no-repeat;
            background-position: center;
            background-size: 70%;
            border-radius: 7px;
        }
        .blok.blok2{
            width: 80px;
            height: 80px;
            background-color:#000;
            background-image: url(https://rakipov.ru/files/icon1.svg);
            background-repeat: no-repeat;
            background-position: center;
            background-size: 70%;
            border-radius: 7px;
        }
    </style>
</head>
<body>
    <main>
        <header></header>
        <section>
            <article>
                <div class="blok"></div>
            </article>
        </section>
    </main>
    <footer></footer>

    <script>
        const blok = document.querySelector(".blok");
        const windowInnerWidth = document.documentElement.clientWidth;

        let anim1 = () => {
            if(windowInnerWidth >= 600){
            let ikonka1 = blok.getBoundingClientRect();
            blok.classList.toggle("blok2", ikonka1.top >= 100);
            }
            else if(windowInnerWidth >= 400){
            let ikonka1 = blok.getBoundingClientRect();
            blok.classList.toggle("blok2", ikonka1.top >= 200);
            }
            console.log(windowInnerWidth);
        };

        window.addEventListener("scroll", anim1);
        anim1(); 
    </script>
</body>
</html>
Ответить с цитированием
  #10 (permalink)  
Старый 08.09.2021, 10:36
Аватар для рони
Профессор
Отправить личное сообщение для рони Посмотреть профиль Найти все сообщения от рони
 
Регистрация: 27.05.2010
Сообщений: 33,126

Сергей Ракипов,
изменяемый параметр лучше проверять перед условием! строку 51 перенесите в начало функции.
Ответить с цитированием
Ответ



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

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


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Как определить реальное расстояние от начала страницы до элемента? cartrege Events/DOM/Window 13 20.12.2018 20:44
Отследить расстояние от верхнего края экрана до элемента Galyanov Элементы интерфейса 2 03.02.2017 23:29
Расстояние до края родительского элемента 1lider Events/DOM/Window 1 01.03.2015 20:32
Расстояние от элемента до элемента (Sandr) Общие вопросы Javascript 4 24.11.2011 17:20
Как запустить функцию при отображении элемента в окне браузера? Kostushko Events/DOM/Window 6 27.09.2010 11:03