Le but est simple, en utilisant une roulette de la souris, zoomer sur un point spécifique (où la souris est). Cela signifie qu'après le zoom, la souris sera dans le même endroit à peu près au même endroit de l'image.Comment zoomer sur un point spécifique (pas de toile)?
(à titre indicatif, je ne me soucie pas si vous utilisez des dauphins, des canards ou madonna pour l'image)
Je ne veux pas utiliser de la toile, et jusqu'à présent, je l'ai essayé quelque chose comme ceci:
HTML
<img src="whatever">
JS
function zoom(e){
var deltaScale = deltaScale || -e.deltaY/1000;
var newScale = scale + deltaScale;
var newWidth = img.naturalWidth * newScale;
var newHeight = img.naturalHeight * newScale;
var x = e.pageX;
var y = e.pageY;
var newX = x * newWidth/img.width;
var newY = y * newHeight/img.height;
var deltaX = newX - x;
var deltaY = newY - y;
setScale(newScale);
setPosDelta(-deltaX,-deltaY);
}
function setPosDelta(dX, dY) {
var imgPos = getPosition();
setPosition(imgPos.x + dX, imgPos.y + dY);
}
function getPosition() {
var x = parseFloat(img.style.left);
var y = parseFloat(img.style.top);
return {
x: x,
y: y
}
}
function setScale(n) {
scale = n;
img.width = img.naturalWidth * n;
img.height = img.naturalHeight * n;
}
Ce que cela tente de faire est de calculer les coordonnées x, y de l'oeil du dauphin avant et après le zoom, et après avoir calculé la distance entre ces deux points, il soustrait de la gauche, haut position afin de corriger le déplacement du zoom, sans succès particulier. Le zoom se produit naturellement en prolongeant l'image vers la droite et vers le bas, de sorte que la correction essaie de se retirer vers la gauche et vers le haut pour garder la souris sur cet œil de dauphin! Mais certainement pas. Dites-moi, quel est le problème avec le code/maths? Je pense que cette question n'est pas trop large, étant donné que je ne pouvais pas trouver de solutions autres que la toile.
Merci!
[EDIT] IMPORTANT
CSS transformer les questions d'ordre, si vous suivez la réponse choisie, assurez-vous de commander la transition d'abord, puis l'échelle. Les transformations CSS sont exécutées à rebours (de droite à gauche) afin que la mise à l'échelle soit traitée en premier, puis la traduction.
J'aime cette version plus, merci , bon travail! Pour une raison quelconque, j'étais bloqué sur celui-ci. – undefined