Pour réaliser un effet de zoom sur une image on peut utiliser JavaScript et du code CSS.
On peut ainsi créer un effet de zoom avec une loupe au survol de la souris, on duplique l'image d'origine pour le placer dans un autre élément superposé, puis on définit l'attribut tailles de cette nouvelle image sur une valeur supérieure pour obtenir une source de résolution plus élevée, et donc un effet de zoom.
Voici comment créer un effet de zoom avec une loupe sur une image :
<!DOCTYPE html>
<html lang="fr">
<head>
<meta charset="utf-8">
<title>Comment créer un effet de zoom avec loupe sur une image HTML ?</title>
<style>
#conteneur_image {
width: 500px;
height: auto;
position: relative;
}
#img_original {
width: 100%;
height: auto;
}
#conteneur_image:hover, #conteneur_image:active {
cursor: zoom-in;
display: block;
}
#conteneur_image:hover #img_zoom, #conteneur_image:active #img_zoom {
opacity: 1;
}
#img_zoom {
width: 250px;
height: 250px;
background: url('https://www.1formatik.fr/images/demo/paris.png') no-repeat transparent;
box-shadow: 0 5px 10px -2px rgba(0,0,0,0.3);
pointer-events: none;
position: absolute;
opacity: 0;
border: 2px solid black;
z-index: 99;
border-radius: 100%;
display: block;
transition: opacity .2s;
}
</style>
</head>
<body>
<div id="conteneur_image">
<img src="https://www.1formatik.fr/images/demo/paris.png" id="img_original">
<div id="img_zoom"></div>
</div>
<script>
let loupe = function (){
document.querySelector('#conteneur_image').addEventListener('mousemove', function(e) {
let image_original = document.querySelector('#img_original'),
image_zoom = document.querySelector('#img_zoom'),
style = image_zoom.style,
x = e.pageX - this.offsetLeft,
y = e.pageY - this.offsetTop,
imgWidth = image_original.offsetWidth,
imgHeight = image_original.offsetHeight,
xpourcentage = ((x/imgWidth) * 100),
ypourcentage = ((y/imgHeight) * 100);
if(x > (.01 * imgWidth)) {
xpourcentage += (.15 * xpourcentage);
};
if(y >= (.01 * imgHeight)) {
ypourcentage += (.15 * ypourcentage);
};
style.backgroundPositionX = (xpourcentage - 9) + '%';
style.backgroundPositionY = (ypourcentage - 9) + '%';
style.left = (x - 180) + 'px';
style.top = (y - 180) + 'px';
}, false);
}();
</script>
</body>
</html>
Démo via cette page.