БЕЗКОШТОВНА ДОСТАВКА ЗАМОВЛЕНЬ ВІД 4000₴
Додайте товари до списку бажань
0
Додайте товари до кошика

Плаття Матеріал: тканина костюмна

Фільтр
Сортування:
Відображення:

Ми дбаємо про вашу конфіденційність

Цей веб-сайт використовує файли cookie для маркетингу та статистичних цілей, а також для безпечної та оптимальної роботи сайту. Ви можете змінити це в налаштуваннях вашого браузера. Натисніть кнопку «Погодитися», щоб дати згоду на використання файлів cookie. Детальніше можна ознайомитися на сторінці Угода користувача.

Скопійовано!
Обирайте українську
✕
Знайомство з FROMUS
Даруємо -10% на перше замовлення
Створюйте свій ідеальний базовий гардероб з вигодою. Ваш промокод на першу покупку:
WELCOME10
Активуйте промокод у кошику. Діє лише сьогодні.
/* FROMUS — FORCE JPG PRODUCT GALLERY v3 PRIVATE Только страница товара. Не меняет дизайн. Использует реальную структуру Horoshop: .gallery__link[data-href] > img.gallery__photo-img и .zoomPhoto[href] */ (() => { 'use strict'; const KEY = 'fromus_force_jpg_product_gallery_v3'; if (localStorage.getItem(KEY) !== '1') return; // Только desktop и только карточка товара if (window.innerWidth < 900 || !document.querySelector('section.product')) return; const ROOT_CLASS = 'fromus-force-jpg-gallery-v3'; document.documentElement.classList.add(ROOT_CLASS); const toJpg = (url) => { if (!url || typeof url !== 'string') return url; // сохраняем query/hash, меняем только расширение return url.replace(/\.webp(?=([?#]|$))/i, '.jpg'); }; const absolute = (url) => { try { return new URL(url, location.origin).href; } catch (_) { return url; } }; function upgradeItem(item) { if (!item) return; const galleryLink = item.querySelector('.gallery__link[data-href]'); const img = item.querySelector('img.gallery__photo-img'); const zoom = item.querySelector('a.zoomPhoto[href], a[href*="/content/images/"]'); // Предпочитаем full-size URL Хорошопа (на твоём сайте это 1200x1600) const fullWebp = galleryLink?.getAttribute('data-href') || zoom?.getAttribute('href') || img?.getAttribute('src'); if (!fullWebp || !/\.webp(?:[?#]|$)/i.test(fullWebp)) return; const jpg = absolute(toJpg(fullWebp)); if (galleryLink) { galleryLink.setAttribute('data-href', jpg); // некоторые версии галереи могут смотреть ещё сюда if (galleryLink.hasAttribute('href')) galleryLink.setAttribute('href', jpg); } if (zoom) { zoom.setAttribute('href', jpg); if (zoom.dataset) { if ('href' in zoom.dataset) zoom.dataset.href = jpg; if ('src' in zoom.dataset) zoom.dataset.src = jpg; } } if (img) { // Убираем альтернативные источники, чтобы браузер не вернулся к WEBP img.removeAttribute('srcset'); img.removeAttribute('data-srcset'); img.removeAttribute('data-src'); img.removeAttribute('loading'); // Подставляем full-size JPG, а не 870x1160 WEBP if (img.src !== jpg) img.src = jpg; if (img.dataset) { for (const key of ['src', 'original', 'lazy', 'image']) { if (key in img.dataset) img.dataset[key] = jpg; } } } item.dataset.fromusJpgV3 = '1'; } function upgradeGallery(root = document) { root.querySelectorAll?.('.gallery__item').forEach(upgradeItem); // fallback, если Horoshop отрисовал картинку вне gallery__item root.querySelectorAll?.('img.gallery__photo-img').forEach(img => { const item = img.closest('.gallery__item') || img.parentElement; upgradeItem(item); }); } // Первый проход const start = () => { upgradeGallery(document); // Наблюдаем ТОЛЬКО за галереей: Horoshop может переставлять active slide const gallery = document.querySelector('.gallery') || document.querySelector('.gallery__photos-list')?.parentElement; if (!gallery) return; const observer = new MutationObserver((mutations) => { let needsRun = false; for (const m of mutations) { if (m.type === 'childList' || m.type === 'attributes') { needsRun = true; break; } } if (needsRun) requestAnimationFrame(() => upgradeGallery(gallery)); }); observer.observe(gallery, { subtree: true, childList: true, attributes: true, attributeFilter: ['src', 'srcset', 'data-src', 'data-srcset', 'data-href', 'href', 'class'] }); }; if (document.readyState === 'loading') { document.addEventListener('DOMContentLoaded', start, { once: true }); } else { start(); } })();