Javascript.RU

Создать новую тему Ответ
 
Опции темы Искать в теме
  #1 (permalink)  
Старый 19.08.2024, 10:22
Кандидат Javascript-наук
Отправить личное сообщение для samdo Посмотреть профиль Найти все сообщения от samdo
 
Регистрация: 27.05.2017
Сообщений: 105

Смена изображений при скролле
Приветствую! Подскажите, как реализовать подобный эффект - смена изображения при скролле (слева).

https://www.select-group.ae/developm...g-business-bay



Спасибо!
Ответить с цитированием
  #2 (permalink)  
Старый 19.08.2024, 20:42
Аватар для voraa
Профессор
Отправить личное сообщение для voraa Посмотреть профиль Найти все сообщения от voraa
 
Регистрация: 03.02.2020
Сообщений: 2,742

Можно с IntersectionObserver сделать

https://developer.mozilla.org/en-US/...n_Observer_API
Ответить с цитированием
  #3 (permalink)  
Старый 19.08.2024, 21:15
Кандидат Javascript-наук
Отправить личное сообщение для samdo Посмотреть профиль Найти все сообщения от samdo
 
Регистрация: 27.05.2017
Сообщений: 105

Сообщение от voraa Посмотреть сообщение
Можно с IntersectionObserver сделать

https://developer.mozilla.org/en-US/...n_Observer_API
А пример кода не подскажете?
Ответить с цитированием
  #4 (permalink)  
Старый 21.08.2024, 14:28
Кандидат Javascript-наук
Отправить личное сообщение для samdo Посмотреть профиль Найти все сообщения от samdo
 
Регистрация: 27.05.2017
Сообщений: 105

В общем сделал таким способом, но не нравится то, что первое и последнее изображение быстро пропадают (удаляется класс visible). Это можно как то отрегулировать? Какой только threshold не пробовал, не подходит.
const items = Array.from(document.querySelectorAll('.grid .block'));
const imgs = document.querySelectorAll('.fading img');

function detectIntersection(entries) {
  for (let e of entries) {
    let i = items.indexOf(e.target);
    if (e.isIntersecting) {
      requestAnimationFrame(ts => {
        e.target.classList.add('visible');
        imgs[i].classList.add('visible');
      });
    } else {
      e.target.classList.remove('visible');
      imgs[i].classList.remove('visible');
    }
  }
}

const options = {
  threshold: 0.5
};

const observer = new IntersectionObserver(
  detectIntersection, options
);

items.forEach(i => observer.observe(i));
Ответить с цитированием
  #5 (permalink)  
Старый 21.08.2024, 22:47
Аватар для Alexandroppolus
Профессор
Отправить личное сообщение для Alexandroppolus Посмотреть профиль Найти все сообщения от Alexandroppolus
 
Регистрация: 25.10.2016
Сообщений: 1,010

samdo,

по твоей ссылке изображения не удаляются, у них просто плавно меняется opacity (прозрачность). Там зачем-то сделали анимацию на js, но ты можешь сделать по нормальному - через стиль transition в css
Ответить с цитированием
  #6 (permalink)  
Старый 22.08.2024, 08:30
Кандидат Javascript-наук
Отправить личное сообщение для samdo Посмотреть профиль Найти все сообщения от samdo
 
Регистрация: 27.05.2017
Сообщений: 105

Сообщение от Alexandroppolus Посмотреть сообщение
samdo,

по твоей ссылке изображения не удаляются, у них просто плавно меняется opacity (прозрачность). Там зачем-то сделали анимацию на js, но ты можешь сделать по нормальному - через стиль transition в css
Я бы с удовольствием сделал это на чистом css, но как отследить скролл. Ведь смена происходит именно при скролле. Если останавливаемся, то изображение не меняется. Плюс, если скроллить вверх, то картинки меняются в обратном порядке.
Ответить с цитированием
Ответ



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

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


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Появление блока при скролле вверх dizent Общие вопросы Javascript 2 18.09.2015 06:16
Смена изображений при прокрутке Иван Федорович Общие вопросы Javascript 30 08.08.2015 19:51
смена картинок при нажатии sdff Общие вопросы Javascript 15 08.02.2014 17:08
Смена при клике "src" текущей на "href" следующей из списка desertFox jQuery 8 30.08.2013 17:15
Смена картинки (бекграунд дива ) при событии (нажатие клавиш или клавиши и мыши) Monster Events/DOM/Window 5 01.11.2009 01:16