
В этом тренажере вы научитесь определять, виден ли элемент в текущей области просмотра пользователя. Это важный навык для создания динамических интерфейсов, которые реагируют на действия пользователя, такие как прокрутка страницы. Вы будете работать с различными свойствами и методами JavaScript, позволяющими получать информацию о размерах и положении элементов, а также определять их видимость. Задания охватывают различные сценарии, от простых проверок до более сложных вычислений с учетом границ окна браузера и вложенности элементов. В каждом задании вам будет предоставлен готовый HTML-код и частично написанный JavaScript-код. Ваша задача - заполнить пропуски в JavaScript-коде, чтобы добиться желаемого результата. После выполнения кода вы увидите визуальное подтверждение правильности вашего решения.
- Модуль 1: Основы выбора элементов
- Выбор элемента по ID.
- Выбор элементов по классу.
- Выбор элементов по тегу.
- Выбор по селектору CSS.
- Выбор по атрибуту.
- Поиск элементов внутри другого элемента.
- Поиск родительского элемента.
- Поиск соседних элементов (предыдущий, следующий).
- Поиск первого и последнего дочернего элемента.
- Поиск всех дочерних элементов.
- Модуль 2: Манипуляция содержимым
- Модуль 3: Работа с атрибутами
- Модуль 4: Управление классами
- Модуль 5: Управление стилями
- Модуль 6: Создание и удаление элементов
- Создание нового элемента.
- Вставка элемента перед другим элементом.
- Вставка элемента после другого элемента.
- Добавление элемента в определенную позицию внутри списка дочерних элементов.
- Удаление элемента из DOM.
- Замена одного элемента другим.
- Перемещение существующего элемента в другое место DOM..
- Очистка содержимого элемента без его удаления.
- Модуль 7: Обработка событий
- Модуль 8: Работа с формами
- Модуль 9: Продвинутые манипуляции
- Модуль 10: Работа с размерами и прокруткой
- Получение размеров элемента.
- Получение позиции элемента относительно окна браузера.
- Получение позиции элемента относительно родительского элемента.
- Управление прокруткой страницы.
- Определение, виден ли элемент в текущей области просмотра.
- Плавная прокрутка к элементу.
- Создание элемента, который фиксируется при прокрутке.
- Модуль 11: Работа с медиа-элементами
- Модуль 12: Практические задания
Простая проверка видимости
Определите, виден ли элемент с id "myElement" на странице. Если элемент полностью виден в пределах окна, измените его текст на "Виден", иначе - на "Не виден". Учтите, что элемент может быть частично виден.
#myElement { width: 100px; height: 100px; background-color: lightblue; }
<div id="myElement"></div>
const element = document.getElementById("myElement");
const rect = element.getBoundingClientRect();
if (rect.top >= 0 && rect.bottom <= input__1) {
element.textContent = "Виден";
} else {
element.textContent = "Не виден";
}
Проверка видимости с учетом прокрутки
Создайте элемент, который изначально скрыт за пределами видимой области. При прокрутке страницы, когда элемент становится полностью видимым, измените его цвет фона на зеленый. Если элемент частично виден, фон должен быть желтым, если полностью скрыт, то красным.
#myElement { width: 100px; height: 100px; background-color: red; margin-top: 500px; }
<div id="myElement"></div>
const element = document.getElementById("myElement");
document.addEventListener("scroll", () => {
const rect = element.getBoundingClientRect();
if (rect.top >= 0 && rect.bottom <= window.innerHeight) {
element.style.backgroundColor = input__1;
} else if (rect.top < window.innerHeight && rect.bottom > 0) {
element.style.backgroundColor = input__2;
} else {
element.style.backgroundColor = input__3;
}
});
Видимость нескольких элементов
На странице есть несколько элементов с классом "block". Определите, какие из этих элементов видимы (полностью или частично), и добавьте к ним класс "visible", а к невидимым - "hidden".
.block { width: 100px; height: 100px; background-color: lightblue; margin-bottom: 290px; }
.visible { border: 2px solid green; }
.hidden { opacity: 0.3; }
<div class="block"></div>
<div class="block"></div>
<div class="block"></div>
const blocks = document.querySelectorAll(".block");
blocks.forEach(block => {
const rect = block.getBoundingClientRect();
if (rect.top < window.innerHeight && rect.bottom > 0) {
block.classList.add(input__1);
block.classList.remove("hidden");
} else {
block.classList.add(input__2);
block.classList.remove("visible");
}
});
Видимость элемента во вложенном контейнере
Определите, виден ли элемент с id "innerElement" внутри контейнера с id "container", который имеет ограниченную высоту и прокрутку. Если элемент полностью видим внутри контейнера, измените его текст на "Виден", иначе на "Не виден".
#container { width: 200px; height: 150px; overflow: auto; border: 1px solid black; }
#innerElement { width: 100px; height: 100px; background-color: lightblue; margin-top: 200px; }
<div id="container">
<div id="innerElement"></div>
</div>
const container = document.getElementById("container");
const element = document.getElementById("innerElement");
const containerRect = container.getBoundingClientRect();
const elementRect = element.getBoundingClientRect();
if (elementRect.top >= containerRect.top && elementRect.bottom <= input__1) {
element.textContent = "Виден";
} else {
element.textContent = "Не виден";
}
Определение видимости элемента при загрузке страницы
Определите, виден ли элемент с id="myImage" при загрузке страницы и выведите в консоль сообщение 'Изображение видимо' или 'Изображение не видимо'.
<img id="myImage" src="https://naytikurs.ru/img/1.png" style="margin-top: 200px;" alt="Test Image">
document.addEventListener("DOMContentLoaded", () => {
const image = document.getElementById(input__1);
const rect = image.getBoundingClientRect();
if (rect.top < window.innerHeight && rect.bottom >= 0) {
console.log('Изображение видимо');
} else {
console.log('Изображение не видимо');
}
});
Изменение текста элемента в зависимости от степени видимости
Изменяйте текст в элементе #myElement в зависимости от того, насколько он виден. Если виден полностью - "Полностью видим", частично - "Частично видим", не виден - "Не видим".
#myElement { width: 100px; height: 100px; background-color: lightblue; margin-top: 500px; }
<div id="myElement"></div>
const element = document.getElementById("myElement");
document.addEventListener("scroll", () => {
const rect = element.getBoundingClientRect();
if (rect.top >= 0 && rect.bottom <= window.innerHeight) {
element.textContent = input__1;
} else if (rect.top < window.innerHeight && rect.bottom > 0) {
element.textContent = input__2;
} else {
element.textContent = input__3;
}
});
Появление элемента при прокрутке
Сделайте так, чтобы элемент с id="hiddenElement" плавно появлялся (изменялась прозрачность от 0 до 1) при прокрутке страницы, когда он становится видимым.
#hiddenElement { width: 100px; height: 100px; background-color: lightcoral; margin-top: 600px; opacity: 0; transition: opacity 0.5s; }
<div id="hiddenElement"></div>
const element = document.getElementById("hiddenElement");
document.addEventListener("scroll", () => {
const rect = element.getBoundingClientRect();
if (rect.top < window.innerHeight && rect.bottom > 0) {
element.style.input__1 = 1;
}
});
Определение видимости элемента с учетом offsetParent
Определите, виден ли элемент с id="nestedElement" на странице. Учтите, что он может быть вложен в другие элементы с position: relative. Выведите результат в консоль.
#parent { position: relative; width: 200px; height: 150px; overflow: hidden; }
#nestedElement { width: 100px; height: 100px; background-color: lightblue; }
<div id="parent">
<div id="nestedElement"></div>
</div>
const element = document.getElementById("nestedElement");
if (input__1) {
console.log("Элемент видим");
} else {
console.log("Элемент не видим");
}