Ma bonne résolution du 12 décembre : ne pas laisser mourir mon blog et l'alimenter.
Voici donc une fonction pour produire un effet de zoom sur une image, un peu comme si l'on passait avec une loupe sur cette image.
Une petite image affichée à l'écran.
Au survol de cette image, on affiche un bloc qui suit le curseur et contient en arrière plan une copie de la petite image mais de plus grandes dimensions. On modifie la position de l'image de fond en fonction de la position du curseur pour afficher la zone survolée agrandie.
voir la page d'exemple
On peut également oter la petite image présente dans la page pour avoir un simple effet de masque.
Pour le html
<div id="mini">
<div id="curseur">
<img src="cercle.png" width="50" height="50" /></div>
<img src="ptt_cascade.png" width="300" height="400" />
</div>
Pour les css :
#mini {
position:absolute;
left:255px;
top:85px;
width:300px;
height:400px;
z-index:1;
overflow: hidden;
}
#curseur {
position: absolute;
margin-left:-12px;
margin-top:-12px;
width:34px;
height:34px;
background-image:url(cascade.png);
background-repeat: no-repeat;
z-index:5;
top: -75px;
left: -75px;
}
#curseur img {
position: absolute;
top:-8px;
left:-8px;
}
Pour commencer, ce qui va permettre de récupérer la position du curseur :
function position(e) {On teste les navigateurs car ceux-ci gèrent différemment la récupération de cette position.
if (navigator.appName.substring(0,3) == "Net") {
x = e.pageX;
y = e.pageY;
}
else {
x = event.x+document.body.scrollLeft;
y = event.y+document.body.scrollTop;
}
}
if(navigator.appName.substring(0,3) == "Net") document.captureEvents(Event.MOUSEMOVE);
document.onmousemove = position;
Ensuite, il s'agit de quelques calculs mathématiques pour déduire l'emplacement de la loupe et de l'image de fond agrandie en fonction de la position du curseur sur l'image et du rapport de proportion entre la grande et la petite image.
curseur_style = document.getElementById("curseur").style;
function masque() {
curseur_style.top = (y-100)+"px";
curseur_style.left = (x-270)+"px";
curseur_style.backgroundPosition = (x-270)*-ratio+"px "+(y-100)*-ratio+"px";
setTimeout("masque()",10);
}
document.getElementById("mini").onmouseover = masque;
Tous le code javascript se place ici dans le body, après le code html sans quoi il ne pourrait trouver les éléments qui ne sont pas encore déclarés.
voir la page d'exemple
Je reconnais que l'utilité de tout ceci peut relever du gadget, il s'agissait plutôt d'un essai pour voir le résultat que l'on pouvait obtenir.
Merci pour ce petit tuto nanoum. Je connaissais pas cet effet :O
Et dire qu'il y en a qui se prenent la tête avec des applet Java !
merci beaucoup nanoum, qu'aurais-je fait sans toi, mais dit moi!!!!!
C'est bien génial !
Ton truc: c'est exactement ce que je veux! seulement je suis un bleu et je sais pas comment l'adapter sachant que j'ai 1 petite image sur une page avec 1 lien qui ouvre 1 plus grande image (mais différent) dans 1 popup sur une partie de laquelle je voudrais appliquer ton effet de zoom. si tu peux m'aiguiller ce serait GENIAL!!
moi je trouve ca très bien également !
ps: et ton blog ne mourra pas, promis !
Serieu c'est vrément terrible !!!!!!!!!!!!
excellent, cependant la souris est décalée par rapport au zoom, ce qui ne permet pas de zoomer partout
Mais c'est super!
Mais c apasse pas sous Opera T_T
c'est super cette technique ! exelent!
bravo!
C bien mais c pas ce que je cherche a plus
j'ai ton truc:
tu as pris l'image, tu as pris l'autre en plus grand et et quand on passe la souris, ça affiche des bouts de l'image plus grande!
Commentaires momentanément fermés. Merci de votre compréhension.