Я проверил изображение по предоставленной вами ссылке и нашел этот элемент:
<div
id="magnifierLens"
style="position: absolute; background-image: url("https://images-na.ssl-images-amazon.com/images/G/01/apparel/rcxgs/tile._CB483369105_.gif"); cursor: pointer; width: 300px; height: 316px; left: 184px; top: 169px;">
</div>
Для синего наложения на изображение, а затем для предварительного просмотра - просто абсолютное значение div
, содержащее исходное изображение без размера. Изображение в окне предварительного просмотра расположено аналогично линзе лупы.
Отсюда вам нужно получить пропорции для наложения изображения и предварительного просмотра изображения.
Похоже, то, что сделал Amazon, содержало измерения информационного элемента продукта:
Чтобы сохранить размеры, вам нужно прикрепить resize
прослушиватель событий к окну
window.addEventListener('resize', onWindowResize); // onWindowResize function would get new component size and update child sizes
Затем вы будете отслеживать положение мыши над изображением:
previewImageElement.addEventListener("mousemove", onMouseMove); // onMouseMove function would update the position of the image overlay, and zoomed image
Как только вы настроите все свои обработчики и слушатели, вы можете рассчитать некоторые размеры и реализовать их.
Вот некоторый псевдокод для расчета размеров:
// Amazons zoom frame has a max size, and it will shrink to fit the zoomed image
const imageOverlayWidth = Math.Max(zoomedFrameWidth / zoomedImageWidth, 1) * imagePreviewWidth;
const imageOverlayWidth = Math.Max(zoomedFrameHeight / zoomedImageHeight, 1) * imagePreviewHeight;
zoomedImageHeight
и zoomedImageWidth
- естественные размеры изображения.
Расчет zoomedFrameWidth
и zoomedFrameHeight
будет зависеть от того, насколько отзывчивым будет ваш предварительный просмотр. Лично я был бы в порядке с максимальными размерами, но без усадки.
zoomedFrameWidth = productInfoContainerWidth * 0.5;
zoomedFrameHeight = productInfoContainerHeight;
Этого должно быть достаточно, чтобы связать хороший предварительный просмотр изображения, как у Amazon. Дайте мне знать, если что-то нуждается в разъяснении, так как это в основном только идеи и psuedocode.