Javascript.RU

Создать новую тему Ответ
 
Опции темы Искать в теме
  #1 (permalink)  
Старый 29.11.2020, 09:38
Аспирант
Отправить личное сообщение для dc65k Посмотреть профиль Найти все сообщения от dc65k
 
Регистрация: 19.05.2020
Сообщений: 46

Как сделать, чтобы некоторый блок, сопоставимый с размерами окна, фиксировался относи
В процессе прокрутки страницы сам блок остается неподвижным, однако, положение скролла влияет на развитие некого сценария внутри него. Это могут быть движения персонажей, появление или исчезновение контента, анимации и так далее.
Пример:
https://www.sber.ru/salute/smartmark...721.1606628165
Мне известно, что есть различные библиотеки, реализующие данный функционал, но я пытаюсь понять, как без их использования реализовать базовую вещь. Например, на странице уже есть определенное количество контента, мы начинаем скролить, справа визуально скролл идет вниз, а страница не скролится до определенного условия.
Я предполагаю, что необходимо сделать возможность прокрутки до определенной позиции, но вопрос с точки зрения синтаксиса как это сделать?
<!doctype html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport"
          content="width=device-width, user-scalable=no, initial-scale=1.0, maximum-scale=1.0, minimum-scale=1.0">
    <meta http-equiv="X-UA-Compatible" content="ie=edge">
	<link rel="stylesheet" href="style.css">
    <title>Document</title>
</head>
<body>
	<div class="root">
        <p>Lorem ipsum dolor sit amet, consectetur adipisicing elit. Culpa eius et iste quae qui saepe sint ut. Aliquid blanditiis dignissimos ducimus, eligendi esse ex explicabo id iste nihil, quos sapiente.</p>
        <p>Lorem ipsum dolor sit amet, consectetur adipisicing elit. Culpa eius et iste quae qui saepe sint ut. Aliquid blanditiis dignissimos ducimus, eligendi esse ex explicabo id iste nihil, quos sapiente.</p>
        <p>Lorem ipsum dolor sit amet, consectetur adipisicing elit. Culpa eius et iste quae qui saepe sint ut. Aliquid blanditiis dignissimos ducimus, eligendi esse ex explicabo id iste nihil, quos sapiente.</p>
        <p>Lorem ipsum dolor sit amet, consectetur adipisicing elit. Culpa eius et iste quae qui saepe sint ut. Aliquid blanditiis dignissimos ducimus, eligendi esse ex explicabo id iste nihil, quos sapiente.</p>
        <p>Lorem ipsum dolor sit amet, consectetur adipisicing elit. Culpa eius et iste quae qui saepe sint ut. Aliquid blanditiis dignissimos ducimus, eligendi esse ex explicabo id iste nihil, quos sapiente.</p>
        <p>Lorem ipsum dolor sit amet, consectetur adipisicing elit. Culpa eius et iste quae qui saepe sint ut. Aliquid blanditiis dignissimos ducimus, eligendi esse ex explicabo id iste nihil, quos sapiente.</p>
        <p>Lorem ipsum dolor sit amet, consectetur adipisicing elit. Culpa eius et iste quae qui saepe sint ut. Aliquid blanditiis dignissimos ducimus, eligendi esse ex explicabo id iste nihil, quos sapiente.</p>
        <p>Lorem ipsum dolor sit amet, consectetur adipisicing elit. Culpa eius et iste quae qui saepe sint ut. Aliquid blanditiis dignissimos ducimus, eligendi esse ex explicabo id iste nihil, quos sapiente.</p>
        <p>Lorem ipsum dolor sit amet, consectetur adipisicing elit. Culpa eius et iste quae qui saepe sint ut. Aliquid blanditiis dignissimos ducimus, eligendi esse ex explicabo id iste nihil, quos sapiente.</p>
        <p>Lorem ipsum dolor sit amet, consectetur adipisicing elit. Culpa eius et iste quae qui saepe sint ut. Aliquid blanditiis dignissimos ducimus, eligendi esse ex explicabo id iste nihil, quos sapiente.</p>
        <p>Lorem ipsum dolor sit amet, consectetur adipisicing elit. Culpa eius et iste quae qui saepe sint ut. Aliquid blanditiis dignissimos ducimus, eligendi esse ex explicabo id iste nihil, quos sapiente.</p>
        <p>Lorem ipsum dolor sit amet, consectetur adipisicing elit. Culpa eius et iste quae qui saepe sint ut. Aliquid blanditiis dignissimos ducimus, eligendi esse ex explicabo id iste nihil, quos sapiente.</p>
        <p>Lorem ipsum dolor sit amet, consectetur adipisicing elit. Culpa eius et iste quae qui saepe sint ut. Aliquid blanditiis dignissimos ducimus, eligendi esse ex explicabo id iste nihil, quos sapiente.</p>
        <p>Lorem ipsum dolor sit amet, consectetur adipisicing elit. Culpa eius et iste quae qui saepe sint ut. Aliquid blanditiis dignissimos ducimus, eligendi esse ex explicabo id iste nihil, quos sapiente.</p>
        <p>Lorem ipsum dolor sit amet, consectetur adipisicing elit. Culpa eius et iste quae qui saepe sint ut. Aliquid blanditiis dignissimos ducimus, eligendi esse ex explicabo id iste nihil, quos sapiente.</p>
        <p>Lorem ipsum dolor sit amet, consectetur adipisicing elit. Culpa eius et iste quae qui saepe sint ut. Aliquid blanditiis dignissimos ducimus, eligendi esse ex explicabo id iste nihil, quos sapiente.</p>
        <p>Lorem ipsum dolor sit amet, consectetur adipisicing elit. Culpa eius et iste quae qui saepe sint ut. Aliquid blanditiis dignissimos ducimus, eligendi esse ex explicabo id iste nihil, quos sapiente.</p>
    </div>
<script src="app.js"></script>
</body>
</html>

class App {
    constructor() {
        this.init();
    }

    init() {
        window.addEventListener('scroll', this.onScrollDocumentHandler)
    }

    onScrollDocumentHandler = (event) => {
        // console.log(pageYOffset);

        let windowRelativeTop = document.documentElement.getBoundingClientRect().top;
        console.log(windowRelativeTop);

        // let windowRelativeBottom = document.documentElement.getBoundingClientRect().bottom;
        // console.log(windowRelativeBottom);
    }
}

const app = new App();
Ответить с цитированием
  #2 (permalink)  
Старый 29.11.2020, 10:04
Аватар для рони
Профессор
Отправить личное сообщение для рони Посмотреть профиль Найти все сообщения от рони
 
Регистрация: 27.05.2010
Сообщений: 33,068

Сообщение от dc65k
справа визуально скролл идет вниз, а страница не скролится до определенного условия.
<!doctype html>
<html lang="en">
<head>
        <meta charset="UTF-8">
        <meta name="viewport"
                    content="width=device-width, user-scalable=no, initial-scale=1.0, maximum-scale=1.0, minimum-scale=1.0">
        <meta http-equiv="X-UA-Compatible" content="ie=edge">
    <link rel="stylesheet" href="style.css">
        <title>Document</title>
</head>
<body>
    <div class="root">
                <p>Lorem ipsum dolor sit amet, consectetur adipisicing elit. Culpa eius et iste quae qui saepe sint ut. Aliquid blanditiis dignissimos ducimus, eligendi esse ex explicabo id iste nihil, quos sapiente.</p>
                <p>Lorem ipsum dolor sit amet, consectetur adipisicing elit. Culpa eius et iste quae qui saepe sint ut. Aliquid blanditiis dignissimos ducimus, eligendi esse ex explicabo id iste nihil, quos sapiente.</p>
                <p>Lorem ipsum dolor sit amet, consectetur adipisicing elit. Culpa eius et iste quae qui saepe sint ut. Aliquid blanditiis dignissimos ducimus, eligendi esse ex explicabo id iste nihil, quos sapiente.</p>
                <p>Lorem ipsum dolor sit amet, consectetur adipisicing elit. Culpa eius et iste quae qui saepe sint ut. Aliquid blanditiis dignissimos ducimus, eligendi esse ex explicabo id iste nihil, quos sapiente.</p>
                <p>Lorem ipsum dolor sit amet, consectetur adipisicing elit. Culpa eius et iste quae qui saepe sint ut. Aliquid blanditiis dignissimos ducimus, eligendi esse ex explicabo id iste nihil, quos sapiente.</p>
                <p>Lorem ipsum dolor sit amet, consectetur adipisicing elit. Culpa eius et iste quae qui saepe sint ut. Aliquid blanditiis dignissimos ducimus, eligendi esse ex explicabo id iste nihil, quos sapiente.</p>
                <p>Lorem ipsum dolor sit amet, consectetur adipisicing elit. Culpa eius et iste quae qui saepe sint ut. Aliquid blanditiis dignissimos ducimus, eligendi esse ex explicabo id iste nihil, quos sapiente.</p>
                <p>Lorem ipsum dolor sit amet, consectetur adipisicing elit. Culpa eius et iste quae qui saepe sint ut. Aliquid blanditiis dignissimos ducimus, eligendi esse ex explicabo id iste nihil, quos sapiente.</p>
                <p>Lorem ipsum dolor sit amet, consectetur adipisicing elit. Culpa eius et iste quae qui saepe sint ut. Aliquid blanditiis dignissimos ducimus, eligendi esse ex explicabo id iste nihil, quos sapiente.</p>
                <p>Lorem ipsum dolor sit amet, consectetur adipisicing elit. Culpa eius et iste quae qui saepe sint ut. Aliquid blanditiis dignissimos ducimus, eligendi esse ex explicabo id iste nihil, quos sapiente.</p>
                <p>Lorem ipsum dolor sit amet, consectetur adipisicing elit. Culpa eius et iste quae qui saepe sint ut. Aliquid blanditiis dignissimos ducimus, eligendi esse ex explicabo id iste nihil, quos sapiente.</p>
                <p>Lorem ipsum dolor sit amet, consectetur adipisicing elit. Culpa eius et iste quae qui saepe sint ut. Aliquid blanditiis dignissimos ducimus, eligendi esse ex explicabo id iste nihil, quos sapiente.</p>
                <p>Lorem ipsum dolor sit amet, consectetur adipisicing elit. Culpa eius et iste quae qui saepe sint ut. Aliquid blanditiis dignissimos ducimus, eligendi esse ex explicabo id iste nihil, quos sapiente.</p>
                <p>Lorem ipsum dolor sit amet, consectetur adipisicing elit. Culpa eius et iste quae qui saepe sint ut. Aliquid blanditiis dignissimos ducimus, eligendi esse ex explicabo id iste nihil, quos sapiente.</p>
                <p>Lorem ipsum dolor sit amet, consectetur adipisicing elit. Culpa eius et iste quae qui saepe sint ut. Aliquid blanditiis dignissimos ducimus, eligendi esse ex explicabo id iste nihil, quos sapiente.</p>
                <p>Lorem ipsum dolor sit amet, consectetur adipisicing elit. Culpa eius et iste quae qui saepe sint ut. Aliquid blanditiis dignissimos ducimus, eligendi esse ex explicabo id iste nihil, quos sapiente.</p>
                <p>Lorem ipsum dolor sit amet, consectetur adipisicing elit. Culpa eius et iste quae qui saepe sint ut. Aliquid blanditiis dignissimos ducimus, eligendi esse ex explicabo id iste nihil, quos sapiente.</p>
        </div>
<script>
class App {
    constructor() {
        this.init();
    }

    init() {
        window.addEventListener('scroll', this.onScrollDocumentHandler)
    }

    onScrollDocumentHandler(event) {
        let windowRelativeTop = window.pageYOffset;
        console.log(windowRelativeTop);
        if(windowRelativeTop < 700) {
            document.body.style.paddingTop = `${windowRelativeTop}px`
        }
    }
}

const app = new App();
</script>
</body>
</html>
Ответить с цитированием
  #3 (permalink)  
Старый 29.11.2020, 10:51
Аватар для voraa
Профессор
Отправить личное сообщение для voraa Посмотреть профиль Найти все сообщения от voraa
 
Регистрация: 03.02.2020
Сообщений: 2,701

А чего размер скролбара меняется?
Проще с контейнером с абсолютным позиционированием и задать высоту body
<!doctype html>
<html lang="en">
<head>
        <meta charset="UTF-8">
        <meta name="viewport"
                    content="width=device-width, user-scalable=no, initial-scale=1.0, maximum-scale=1.0, minimum-scale=1.0">
        <meta http-equiv="X-UA-Compatible" content="ie=edge">
    <link rel="stylesheet" href="style.css">
    <style>
    body {
		height: 2000px;
    }
    #cnt {
		position: absolute;
	}
     p:first-child {
       color:blue;
     }
    </style>
        <title>Document</title>
</head>
<body>
	<div id=cnt>
    <div class="root" >
                <p>Lorem ipsum dolor sit amet, consectetur adipisicing elit. Culpa eius et iste quae qui saepe sint ut. Aliquid blanditiis dignissimos ducimus, eligendi esse ex explicabo id iste nihil, quos sapiente.</p>
                <p>Lorem ipsum dolor sit amet, consectetur adipisicing elit. Culpa eius et iste quae qui saepe sint ut. Aliquid blanditiis dignissimos ducimus, eligendi esse ex explicabo id iste nihil, quos sapiente.</p>
                <p>Lorem ipsum dolor sit amet, consectetur adipisicing elit. Culpa eius et iste quae qui saepe sint ut. Aliquid blanditiis dignissimos ducimus, eligendi esse ex explicabo id iste nihil, quos sapiente.</p>
                <p>Lorem ipsum dolor sit amet, consectetur adipisicing elit. Culpa eius et iste quae qui saepe sint ut. Aliquid blanditiis dignissimos ducimus, eligendi esse ex explicabo id iste nihil, quos sapiente.</p>
                <p>Lorem ipsum dolor sit amet, consectetur adipisicing elit. Culpa eius et iste quae qui saepe sint ut. Aliquid blanditiis dignissimos ducimus, eligendi esse ex explicabo id iste nihil, quos sapiente.</p>
                <p>Lorem ipsum dolor sit amet, consectetur adipisicing elit. Culpa eius et iste quae qui saepe sint ut. Aliquid blanditiis dignissimos ducimus, eligendi esse ex explicabo id iste nihil, quos sapiente.</p>
                <p>Lorem ipsum dolor sit amet, consectetur adipisicing elit. Culpa eius et iste quae qui saepe sint ut. Aliquid blanditiis dignissimos ducimus, eligendi esse ex explicabo id iste nihil, quos sapiente.</p>
                <p>Lorem ipsum dolor sit amet, consectetur adipisicing elit. Culpa eius et iste quae qui saepe sint ut. Aliquid blanditiis dignissimos ducimus, eligendi esse ex explicabo id iste nihil, quos sapiente.</p>
                <p>Lorem ipsum dolor sit amet, consectetur adipisicing elit. Culpa eius et iste quae qui saepe sint ut. Aliquid blanditiis dignissimos ducimus, eligendi esse ex explicabo id iste nihil, quos sapiente.</p>
                <p>Lorem ipsum dolor sit amet, consectetur adipisicing elit. Culpa eius et iste quae qui saepe sint ut. Aliquid blanditiis dignissimos ducimus, eligendi esse ex explicabo id iste nihil, quos sapiente.</p>
                <p>Lorem ipsum dolor sit amet, consectetur adipisicing elit. Culpa eius et iste quae qui saepe sint ut. Aliquid blanditiis dignissimos ducimus, eligendi esse ex explicabo id iste nihil, quos sapiente.</p>
                <p>Lorem ipsum dolor sit amet, consectetur adipisicing elit. Culpa eius et iste quae qui saepe sint ut. Aliquid blanditiis dignissimos ducimus, eligendi esse ex explicabo id iste nihil, quos sapiente.</p>
                <p>Lorem ipsum dolor sit amet, consectetur adipisicing elit. Culpa eius et iste quae qui saepe sint ut. Aliquid blanditiis dignissimos ducimus, eligendi esse ex explicabo id iste nihil, quos sapiente.</p>
                <p>Lorem ipsum dolor sit amet, consectetur adipisicing elit. Culpa eius et iste quae qui saepe sint ut. Aliquid blanditiis dignissimos ducimus, eligendi esse ex explicabo id iste nihil, quos sapiente.</p>
                <p>Lorem ipsum dolor sit amet, consectetur adipisicing elit. Culpa eius et iste quae qui saepe sint ut. Aliquid blanditiis dignissimos ducimus, eligendi esse ex explicabo id iste nihil, quos sapiente.</p>
                <p>Lorem ipsum dolor sit amet, consectetur adipisicing elit. Culpa eius et iste quae qui saepe sint ut. Aliquid blanditiis dignissimos ducimus, eligendi esse ex explicabo id iste nihil, quos sapiente.</p>
                <p>Lorem ipsum dolor sit amet, consectetur adipisicing elit. Culpa eius et iste quae qui saepe sint ut. Aliquid blanditiis dignissimos ducimus, eligendi esse ex explicabo id iste nihil, quos sapiente.</p>
        </div>
     </div>
<script>
class App {
    constructor() {
        this.init();
    }
 
    init() {
        window.addEventListener('scroll', this.onScrollDocumentHandler)
    }
 
    onScrollDocumentHandler(event) {
        let windowRelativeTop = window.pageYOffset;
        console.log(windowRelativeTop);
        if(windowRelativeTop < 700) {
			document.getElementById('cnt').style.top = `${windowRelativeTop}px`;
        }
    }
}
 
const app = new App();
</script>
</body>
</html>

Последний раз редактировалось voraa, 29.11.2020 в 10:54.
Ответить с цитированием
  #4 (permalink)  
Старый 29.11.2020, 11:08
Аспирант
Отправить личное сообщение для dc65k Посмотреть профиль Найти все сообщения от dc65k
 
Регистрация: 19.05.2020
Сообщений: 46

Всем спасибо. Судя по всему, пока лучший вариант, это тот, как сделано в примере, так как, варианты выше, я думаю не подходят, потому что визуально при добавлении стилей происходят скачки.
<!doctype html run>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport"
          content="width=device-width, user-scalable=no, initial-scale=1.0, maximum-scale=1.0, minimum-scale=1.0">
    <meta http-equiv="X-UA-Compatible" content="ie=edge">
    <title>Document</title>
    <style>
        html, body {
            height: 2000px;
        }

        .root {
            width: 100%;
            /*height: 100%;*/
            height: calc(100% * 5);
        }

        .container {
            position: sticky;
            top: 0;
        }
    </style>
</head>
<body>
<div class="root">
    <div class="container">
        <h1>Title</h1>
        <p>Lorem ipsum dolor sit amet, consectetur adipisicing elit. Culpa eius et iste quae qui saepe sint ut. Aliquid
            blanditiis dignissimos ducimus, eligendi esse ex explicabo id iste nihil, quos sapiente.</p>
        <p>Lorem ipsum dolor sit amet, consectetur adipisicing elit. Culpa eius et iste quae qui saepe sint ut. Aliquid
            blanditiis dignissimos ducimus, eligendi esse ex explicabo id iste nihil, quos sapiente.</p>
        <p>Lorem ipsum dolor sit amet, consectetur adipisicing elit. Culpa eius et iste quae qui saepe sint ut. Aliquid
            blanditiis dignissimos ducimus, eligendi esse ex explicabo id iste nihil, quos sapiente.</p>
        <p>Lorem ipsum dolor sit amet, consectetur adipisicing elit. Culpa eius et iste quae qui saepe sint ut. Aliquid
            blanditiis dignissimos ducimus, eligendi esse ex explicabo id iste nihil, quos sapiente.</p>
        <p>Lorem ipsum dolor sit amet, consectetur adipisicing elit. Culpa eius et iste quae qui saepe sint ut. Aliquid
            blanditiis dignissimos ducimus, eligendi esse ex explicabo id iste nihil, quos sapiente.</p>
        <p>Lorem ipsum dolor sit amet, consectetur adipisicing elit. Culpa eius et iste quae qui saepe sint ut. Aliquid
            blanditiis dignissimos ducimus, eligendi esse ex explicabo id iste nihil, quos sapiente.</p>
        <p>Lorem ipsum dolor sit amet, consectetur adipisicing elit. Culpa eius et iste quae qui saepe sint ut. Aliquid
            blanditiis dignissimos ducimus, eligendi esse ex explicabo id iste nihil, quos sapiente.</p>
        <p>Lorem ipsum dolor sit amet, consectetur adipisicing elit. Culpa eius et iste quae qui saepe sint ut. Aliquid
            blanditiis dignissimos ducimus, eligendi esse ex explicabo id iste nihil, quos sapiente.</p>
        <p>Lorem ipsum dolor sit amet, consectetur adipisicing elit. Culpa eius et iste quae qui saepe sint ut. Aliquid
            blanditiis dignissimos ducimus, eligendi esse ex explicabo id iste nihil, quos sapiente.</p>
        <p>Lorem ipsum dolor sit amet, consectetur adipisicing elit. Culpa eius et iste quae qui saepe sint ut. Aliquid
            blanditiis dignissimos ducimus, eligendi esse ex explicabo id iste nihil, quos sapiente.</p>
        <p>Lorem ipsum dolor sit amet, consectetur adipisicing elit. Culpa eius et iste quae qui saepe sint ut. Aliquid
            blanditiis dignissimos ducimus, eligendi esse ex explicabo id iste nihil, quos sapiente.</p>
        <p>Lorem ipsum dolor sit amet, consectetur adipisicing elit. Culpa eius et iste quae qui saepe sint ut. Aliquid
            blanditiis dignissimos ducimus, eligendi esse ex explicabo id iste nihil, quos sapiente.</p>
        <p>Lorem ipsum dolor sit amet, consectetur adipisicing elit. Culpa eius et iste quae qui saepe sint ut. Aliquid
            blanditiis dignissimos ducimus, eligendi esse ex explicabo id iste nihil, quos sapiente.</p>
        <p>Lorem ipsum dolor sit amet, consectetur adipisicing elit. Culpa eius et iste quae qui saepe sint ut. Aliquid
            blanditiis dignissimos ducimus, eligendi esse ex explicabo id iste nihil, quos sapiente.</p>
        <p>Lorem ipsum dolor sit amet, consectetur adipisicing elit. Culpa eius et iste quae qui saepe sint ut. Aliquid
            blanditiis dignissimos ducimus, eligendi esse ex explicabo id iste nihil, quos sapiente.</p>
        <p>Lorem ipsum dolor sit amet, consectetur adipisicing elit. Culpa eius et iste quae qui saepe sint ut. Aliquid
            blanditiis dignissimos ducimus, eligendi esse ex explicabo id iste nihil, quos sapiente.</p>
    </div>
</div>
</body>
</html>

Последний раз редактировалось dc65k, 29.11.2020 в 11:44.
Ответить с цитированием
  #5 (permalink)  
Старый 29.11.2020, 11:24
Аватар для рони
Профессор
Отправить личное сообщение для рони Посмотреть профиль Найти все сообщения от рони
 
Регистрация: 27.05.2010
Сообщений: 33,068

dc65k,
добавьте run в свой код
[html run]
... минимальный код страницы с вашей проблемой
[/html]

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

Done.
Ответить с цитированием
Ответ



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

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


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Как сделать сквозной блок? art1989 Элементы интерфейса 8 18.09.2014 22:51
Как вы относитесь к наркоманам? Maxmaxmaximus7 Оффтопик 7 05.02.2014 13:29
Как сделать, чтобы при заходе на страницу открывались в 2-х окнах 2 ссылки ? autobuh Общие вопросы Javascript 1 26.08.2013 15:27
Как сделать блок кнопкой Vladislav Общие вопросы Javascript 2 23.02.2013 16:47
Как сделать, чтобы 2 ссылки отображались как hover при наведении мышкой на любую? Ava Элементы интерфейса 5 19.05.2009 23:24