Я разрабатывал свое портфель и хотел использовать эту анимацию известным дизайнером Патриком Дэвидом.
в их портфеле: https://bepatrickdavid.com, в разделе «Проекты», когда кто -то нажимает на любой проект, который он создает захватывающий оверлей и отскакивает, когда мы нажимаем, какой будет наиболее оптимизированный метод, чтобы достичь этого? Я попытался использовать GSAP и сохранить позиции Intiial и FinalRect и перемещать изображение с начального к финалу, например: < /p>
Но у этого есть много проблем, так как просмотр в мобильных устройствах динамичен и делает анимационную сбоку и не оптимизированный, может ли кто -нибудь предложить наиболее надежный способ сделать это? Scrollsmoether вмешался в наложенный Div с данным содержимым, если я пошел в этот путь. < /p>
useEffect(() => {
const isBlogReturning = sessionStorage.getItem('isBlogReturning') === 'true';
const fromRect = JSON.parse(sessionStorage.getItem('blogImageFinalRect'));
const toRect = JSON.parse(sessionStorage.getItem('blogImageRect'));
const imageSrc = sessionStorage.getItem('blogImageSrc');
if (isBlogReturning && fromRect && toRect && imageSrc) {
document.body.style.overflow = 'hidden';
document.body.style.pointerEvents = 'none'; // Disable pointer events during animation
const clone = document.createElement('img');
clone.src = imageSrc;
clone.style.position = 'fixed';
clone.style.top = `${fromRect.top}px`;
clone.style.left = `${fromRect.left}px`;
clone.style.width = `${fromRect.width}px`;
clone.style.height = `${fromRect.height}px`;
clone.style.objectFit = 'cover';
clone.style.zIndex = 9999;
clone.style.transition = 'all 1s ease';
document.body.appendChild(clone);
requestAnimationFrame(() => {
clone.style.top = `${toRect.top}px`;
clone.style.left = `${toRect.left}px`;
clone.style.width = `${toRect.width}px`;
clone.style.height = `${toRect.height}px`;
});
setTimeout(() => {
document.body.style.overflow = '';
document.body.style.pointerEvents = '';
document.body.removeChild(clone);
sessionStorage.removeItem('blogImageFinalRect');
sessionStorage.removeItem('blogImageRect');
sessionStorage.removeItem('blogImageSrc');
sessionStorage.removeItem('isBlogReturning');
}, 1100);
}
}, []);
Подробнее здесь: https://stackoverflow.com/questions/796 ... o-fullscre
Как реализовать плавный переход изображений общего элемента (миниатюра к полноэкранному наложению и обратно) с GSAP? ⇐ CSS
Разбираемся в CSS
1750438021
Anonymous
Я разрабатывал свое портфель и хотел использовать эту анимацию известным дизайнером Патриком Дэвидом.
в их портфеле: https://bepatrickdavid.com, в разделе «Проекты», когда кто -то нажимает на любой проект, который он создает захватывающий оверлей и отскакивает, когда мы нажимаем, какой будет наиболее оптимизированный метод, чтобы достичь этого? Я попытался использовать GSAP и сохранить позиции Intiial и FinalRect и перемещать изображение с начального к финалу, например: < /p>
Но у этого есть много проблем, так как просмотр в мобильных устройствах динамичен и делает анимационную сбоку и не оптимизированный, может ли кто -нибудь предложить наиболее надежный способ сделать это? Scrollsmoether вмешался в наложенный Div с данным содержимым, если я пошел в этот путь. < /p>
useEffect(() => {
const isBlogReturning = sessionStorage.getItem('isBlogReturning') === 'true';
const fromRect = JSON.parse(sessionStorage.getItem('blogImageFinalRect'));
const toRect = JSON.parse(sessionStorage.getItem('blogImageRect'));
const imageSrc = sessionStorage.getItem('blogImageSrc');
if (isBlogReturning && fromRect && toRect && imageSrc) {
document.body.style.overflow = 'hidden';
document.body.style.pointerEvents = 'none'; // Disable pointer events during animation
const clone = document.createElement('img');
clone.src = imageSrc;
clone.style.position = 'fixed';
clone.style.top = `${fromRect.top}px`;
clone.style.left = `${fromRect.left}px`;
clone.style.width = `${fromRect.width}px`;
clone.style.height = `${fromRect.height}px`;
clone.style.objectFit = 'cover';
clone.style.zIndex = 9999;
clone.style.transition = 'all 1s ease';
document.body.appendChild(clone);
requestAnimationFrame(() => {
clone.style.top = `${toRect.top}px`;
clone.style.left = `${toRect.left}px`;
clone.style.width = `${toRect.width}px`;
clone.style.height = `${toRect.height}px`;
});
setTimeout(() => {
document.body.style.overflow = '';
document.body.style.pointerEvents = '';
document.body.removeChild(clone);
sessionStorage.removeItem('blogImageFinalRect');
sessionStorage.removeItem('blogImageRect');
sessionStorage.removeItem('blogImageSrc');
sessionStorage.removeItem('isBlogReturning');
}, 1100);
}
}, []);
Подробнее здесь: [url]https://stackoverflow.com/questions/79673718/how-to-implement-a-smooth-shared-element-image-transition-thumbnail-to-fullscre[/url]
Ответить
1 сообщение
• Страница 1 из 1
Перейти
- Кемерово-IT
- ↳ Javascript
- ↳ C#
- ↳ JAVA
- ↳ Elasticsearch aggregation
- ↳ Python
- ↳ Php
- ↳ Android
- ↳ Html
- ↳ Jquery
- ↳ C++
- ↳ IOS
- ↳ CSS
- ↳ Excel
- ↳ Linux
- ↳ Apache
- ↳ MySql
- Детский мир
- Для души
- ↳ Музыкальные инструменты даром
- ↳ Печатная продукция даром
- Внешняя красота и здоровье
- ↳ Одежда и обувь для взрослых даром
- ↳ Товары для здоровья
- ↳ Физкультура и спорт
- Техника - даром!
- ↳ Автомобилистам
- ↳ Компьютерная техника
- ↳ Плиты: газовые и электрические
- ↳ Холодильники
- ↳ Стиральные машины
- ↳ Телевизоры
- ↳ Телефоны, смартфоны, плашеты
- ↳ Швейные машинки
- ↳ Прочая электроника и техника
- ↳ Фототехника
- Ремонт и интерьер
- ↳ Стройматериалы, инструмент
- ↳ Мебель и предметы интерьера даром
- ↳ Cантехника
- Другие темы
- ↳ Разное даром
- ↳ Давай меняться!
- ↳ Отдам\возьму за копеечку
- ↳ Работа и подработка в Кемерове
- ↳ Давай с тобой поговорим...
Мобильная версия