Форум программистов, компьютерный форум, киберфорум
JavaScript для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.64/11: Рейтинг темы: голосов - 11, средняя оценка - 4.64
1 / 1 / 0
Регистрация: 19.08.2013
Сообщений: 163

Как обратиться к блоку, который в поле видимости?

18.10.2019, 22:02. Показов 2069. Ответов 7
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Здравствуйте. Хочу реализовать появление блоков при прокрутке через GSAP. Подскажите, как можно обратиться к блокам, которые находится в поле видимости?
HTML5
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
<div class="box"></div>
<div class="box"></div>
<div class="box"></div>
<div class="box"></div>
<div class="box"></div>
<div class="box"></div>
<div class="box"></div>
<div class="box"></div>
<div class="box"></div>
<div class="box"></div>
<div class="box"></div>
<div class="box"></div>
<div class="box"></div>
<div class="box"></div>
<div class="box"></div>
<div class="box"></div>
<div class="box"></div>
<div class="box"></div>
<div class="box"></div>
<div class="box"></div>
JavaScript
1
2
3
4
5
6
7
8
// find elements
var banner = $("#banner-message")
var button = $("button")
 
// handle click and add class
button.on("click", function(){
  banner.addClass("alt")
})
CSS
1
2
3
4
5
6
7
8
9
10
11
12
13
body {
  background: #20262E;
  padding: 20px;
  font-family: Helvetica;
}
 
.box    {
    width: 150px;
    height: 150px;
    margin: 50px;
    background: white;
    float:left;
}
https://jsfiddle.net/drkrol/yvduhk28/5/
0
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
18.10.2019, 22:02
Ответы с готовыми решениями:

Как обратиться к блоку, не используя ById и ClassName
Привет, нужно убрать id с кнопок, та и не только с кнопок, но я к ним таким образом обращался, можно ли как-то обратиться к...

Как обратиться к первому по парядку блоку div?
У меня есть код, примерно следующего типа &lt;div id=&quot;block&quot;&gt; &lt;div class=&quot;myclass&quot;&gt;&lt;/div&gt; &lt;div...

Как применить стиль к элементу/блоку на который кликнули?
Как применить стиль к элементу/блоку на который кликнули?

7
 Аватар для Yura007
61 / 44 / 16
Регистрация: 09.02.2019
Сообщений: 149
18.10.2019, 23:25
JavaScript
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
// ...содержимое страницы выше...
 
function isVisible(elem) {
 
  let coords = elem.getBoundingClientRect();
 
  let windowHeight = document.documentElement.clientHeight;
 
  // верхний край элемента виден?
  let topVisible = coords.top > 0 && coords.top < windowHeight;
 
  // нижний край элемента виден?
  let bottomVisible = coords.bottom < windowHeight && coords.bottom > 0;
 
  return topVisible || bottomVisible;
}

JavaScript
1
2
3
4
5
6
7
8
9
function showVisible() {
  for (let obj of document.querySelectorAll('класс объекта за которым будем наблюдать')) {
   
 
    if (isVisible(элемент который хотите проверить находится ли он в зоне видимости)) {
    действия над элементом  
    }
  }
}
showVisible();
window.onscroll = showVisible;
0
1 / 1 / 0
Регистрация: 19.08.2013
Сообщений: 163
19.10.2019, 14:34  [ТС]
А класс объекта за которым будем наблюдать и элемент который хотите проверить находится ли он в зоне видимости должны быть разными?

Вот я попытался встроить ваш код в мой
JavaScript
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
function isVisible(elem) {
 
  let coords = elem.getBoundingClientRect();
 
  let windowHeight = document.documentElement.clientHeight;
 
  // верхний край элемента виден?
  let topVisible = coords.top > 0 && coords.top < windowHeight;
 
  // нижний край элемента виден?
  let bottomVisible = coords.bottom < windowHeight && coords.bottom > 0;
 
  return topVisible || bottomVisible;
}
 
function showVisible() {
  for (let obj of document.querySelectorAll('.box')) {
   
 
    if (isVisible($('.box'))) {
    console.log(this)
    }
  }
}
 
 
$(window).bind('wheel', function(event) {
    // ------- ВНИЗ
    if (event.originalEvent.deltaY >= 0) {
                  console.log("вниз");  
function showVisible() {
  for (let obj of document.querySelectorAll('.box')) {
    if (isVisible($('.box'))) {
    console.log(this);
    }
  }
}
    // ----ВВЕРХ
    } else {
                console.log("вверх");
       
        }
 
});
jssfiddle: https://jsfiddle.net/drkrol/yvduhk28/8/
По логике я должен во время прокрутки, если объекты в зоне видимости, получить их свойства в console.log
0
 Аватар для Yura007
61 / 44 / 16
Регистрация: 09.02.2019
Сообщений: 149
19.10.2019, 21:04
HTML5
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
<div class="IseeYou" >1 </div>
<div class="IseeYou" > 2</div>
<div class="IseeYou" > 3</div>
<div class="IseeYou" > 4</div>
<div class="IseeYou" > 5</div>
<div class="IseeYou" > 6</div>
<div class="IseeYou" >7 </div>
<div class="IseeYou" >8</div>
<div class="IseeYou" > 9</div>
<div class="IseeYou" >10 </div>
<div class="IseeYou" > 11</div>
<div class="IseeYou" > 12</div>
<div class="IseeYou" > 13</div>
<div class="IseeYou" > 14</div>
<div class="IseeYou" > 15</div>
<div class="IseeYou" >16 </div>
<div class="IseeYou" >17 </div>
<div class="IseeYou" > 18</div>
<div class="IseeYou" >19 </div>
<div class="IseeYou" > 20</div>
<div class="IseeYou" > 21</div>
<div class="IseeYou" > 22</div>
<div class="IseeYou" > 23</div>
<div class="IseeYou" > 24</div>
<div class="IseeYou" >25 </div>
<div class="IseeYou" >26</div>
<div class="IseeYou" > 27</div>
<div class="IseeYou" >28 </div>
<div class="IseeYou" > 29</div>
<div class="IseeYou" > 30</div>
<div class="IseeYou" > 31</div>
<div class="IseeYou" > 32</div>
<div class="IseeYou" > 33</div>
<div class="IseeYou" >34 </div>
<div class="IseeYou" >35 </div>
<div class="IseeYou" > 36</div>
JavaScript
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
function isVisible(elem) {
 
  let coords = elem.getBoundingClientRect();
 
  let windowHeight = document.body.clientHeight;
 
  // верхний край элемента виден?
  
  let topVisible = coords.top > 0 && coords.top < windowHeight;
 
  // нижний край элемента виден?
  let bottomVisible = coords.bottom < windowHeight && coords.bottom > 0;
 
  return topVisible || bottomVisible;
}
 
function showVisible() {
  for (let obj of document.querySelectorAll('.IseeYou')) {   
  
    if (isVisible(obj)) {
    console.log("Смотри на меня ")
    console.log(obj)
 
    }
  }
}
showVisible();
 
 
 
window.onscroll = showVisible;
Добавлено через 1 минуту
вставите в html и при прокрутке в консоле будет отзыв от тех блоков которые попадают в видимую область

Добавлено через 33 минуты
CSS
1
2
3
4
5
6
7
8
.IseeYou {
  height: 100px;
  width: 100px
    ;
  background: #4ca75f;
  display: block;
  margin-bottom: 10px;
}
0
Эксперт JS
2037 / 1096 / 409
Регистрация: 29.04.2016
Сообщений: 2,625
20.10.2019, 02:34
drkrol,

https://codepen.io/Mr_Sergo/pen/oNNYGEg

JavaScript
1
2
3
4
5
6
7
const observer = new IntersectionObserver((entries, observer) => {
    entries.forEach(n => n.target.classList.toggle('red', n.isIntersecting));
}, {
    threshold: 0.5
});
 
document.querySelectorAll('.box').forEach(n => observer.observe(n));
0
1 / 1 / 0
Регистрация: 19.08.2013
Сообщений: 163
21.10.2019, 22:38  [ТС]
Yura007, очень круто, понятно, но не работает:

я должен видеть в консоли: 35 - 36, но их нет...
Mr_Sergo, непонятно... Вы дали готовое решение, которое я не смог разобрать. Мне же в идеале нужно obj получить, а потом с ним работать
0
Эксперт JS
2037 / 1096 / 409
Регистрация: 29.04.2016
Сообщений: 2,625
22.10.2019, 06:00
Что значит
Цитата Сообщение от drkrol Посмотреть сообщение
obj получить
?

Если вам нужно
Цитата Сообщение от drkrol Посмотреть сообщение
обратиться к блокам, которые находится в поле видимости
то так
JavaScript
1
2
3
4
5
6
7
8
9
const Observer = new IntersectionObserver((entries, imgObserver) => {
    entries.forEach(e => e.isIntersecting && onVisible(e.target) )
},{ threshold: 0.5 });  // 0.5 - это число на которое элемент должен появиться в поле видимости (50%), если, к примеру, нужно обратиться к элементу только тогда когда он целиком виден то поменять 0.5 на 1 (100%)
 
document.querySelectorAll('.box').forEach(e => Observer.observe(e) );  // тут указываем свой клас за которым будем наблюдать
 
const onVisible = elm => {  // что делать с элементами которые в поле видимости
    console.log(elm);  // выводим их в консоль
}
0
 Аватар для Yura007
61 / 44 / 16
Регистрация: 09.02.2019
Сообщений: 149
22.10.2019, 19:01
все там работает ну бывают погрешности сделайте поправки ... это же не с нуля писать
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
22.10.2019, 19:01
Помогаю со студенческими работами здесь

Добавление класса блоку при его появление в области видимости окна браузера
Доброго времени суток При прокрутке страницы необходимо добавить блоку с class=&quot;block_scroll&quot; класс anim Если блок на...

Как обратиться к объекту в который бьет луч?
Как обратиться к объекту в который бьет луч? То есть, есть такая запись: private RaycastHit RCH; void Update{ if...

Как обратиться к массиву, который в массиве? React
Всем привет, подскажите как можно обратиться к массиву, который в массиве? Вот мой код: import React, { Component } from 'react'; ...

Как из Page обратиться к методу, который находится в MainFrame
Добрый день уважаемые программисты! Мне нужна ваша помощь. Приложение пишу в WPF. В главном окне MainWindow.xaml создал контролл...

Как обратиться к параметрам объекта, который выше по иерархии?
ДОБРЫЙ ДЕНЬ! Есть вопрос. Например, есть класс &quot;Tпомещение&quot; и есть класс &quot;Tмебель&quot;. Объект типа &quot;мебель&quot; является...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
8
Ответ Создать тему
Новые блоги и статьи
YAFU@home — распределённые вычисления для математики. На CPU
Programma_Boinc 20.01.2026
YAFU@home — распределённые вычисления для математики. На CPU YAFU@home — это BOINC-проект, который занимается факторизацией больших чисел и исследованием aliquot-последовательностей. Звучит. . .
http://iceja.net/ математические сервисы
iceja 20.01.2026
Обновила свой сайт http:/ / iceja. net/ , приделала Fast Fourier Transform экстраполяцию сигналов. Однако предсказывает далеко не каждый сигнал (см ограничения http:/ / iceja. net/ fourier/ docs ). Также. . .
http://iceja.net/ сервер решения полиномов
iceja 18.01.2026
Выкатила http:/ / iceja. net/ сервер решения полиномов (находит действительные корни полиномов методом Штурма). На сайте документация по API, но скажу прямо VPS слабенький и 200 000 полиномов. . .
Расчёт переходных процессов в цепи постоянного тока
igorrr37 16.01.2026
/ * Дана цепь постоянного тока с R, L, C, k(ключ), U, E, J. Программа составляет систему уравнений по 1 и 2 законам Кирхгофа, решает её и находит: токи, напряжения и их 1 и 2 производные при t = 0;. . .
Восстановить юзерскрипты Greasemonkey из бэкапа браузера
damix 15.01.2026
Если восстановить из бэкапа профиль Firefox после переустановки винды, то список юзерскриптов в Greasemonkey будет пустым. Но восстановить их можно так. Для этого понадобится консольная утилита. . .
Сукцессия микоризы: основная теория в виде двух уравнений.
anaschu 11.01.2026
https:/ / rutube. ru/ video/ 7a537f578d808e67a3c6fd818a44a5c4/
WordPad для Windows 11
Jel 10.01.2026
WordPad для Windows 11 — это приложение, которое восстанавливает классический текстовый редактор WordPad в операционной системе Windows 11. После того как Microsoft исключила WordPad из. . .
Classic Notepad for Windows 11
Jel 10.01.2026
Old Classic Notepad for Windows 11 Приложение для Windows 11, позволяющее пользователям вернуть классическую версию текстового редактора «Блокнот» из Windows 10. Программа предоставляет более. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru