Je suis en train de créer une carte interactive d'une petite zone géographique en utilisant du canevas HTML. Le canevas correspondra à la largeur et à la hauteur de l'image de carte utilisée. La carte comportera quelques points, et quand on clique dessus, la toile doit se centrer sur ce point et zoomer dessus.Comment centrer et zoomer sur un point cliqué dans le canevas
Je l'ai jusqu'à présent essayé en utilisant translate
le contexte de dessin, le dessin de l'image de la carte afin que le point cliqué se trouve dans le centre de la toile, puis en utilisant scale
pour zoomer, comme suit:
var clickX = e.offsetX || (e.pageX - canvas.offsetLeft);
var clickY = e.offsetY || (e.pageY - canvas.offsetTop);
clickedPoint = { x: clickX, y: clickY };
ctx.translate(
canvas.width/2 - clickedPoint.x,
canvas.height/2 - clickedPoint.y
);
ctx.scale(2, 2);
Toutefois, lorsque je dessine à ce stade, l'image n'apparaît pas à l'endroit prévu. Je devine parce que le point traduit ne s'aligne pas après la fonction d'échelle, car la traduction se déroule correctement sans l'échelle, mais je n'arrive pas à obtenir ce fonctionnement - quelqu'un peut-il expliquer comment résoudre cela?
EDIT: par exemple lien - http://staging.clicky.co.uk/canvas/
Merci, j'ai réussi à obtenir ce travail - mais je travaille maintenant sur l'animation pour zoomer et faire un panoramique sur le point cliqué. J'essaie d'obtenir les étapes entre l'origine par défaut (vraisemblablement 0, 0) et la nouvelle origine, et mettre à jour ceci avec la nouvelle échelle à chaque image de l'animation, mais je ne suis même pas proche à la minute. tous les conseils que vous pouvez donner seraient très utiles! – jtrich
@jtrich Vous pouvez interpoler l'échelle et l'origine, bien que l'échelle soit un multiplicateur, les meilleurs résultats nécessiteront une interpolation non linéaire (polynomiale) pour l'origine ou l'échelle. Mais essayez l'interpolation linéaire, si la différence d'échelle est faible, alors vous pouvez être heureux avec le look. – Blindman67
Excuses, n'expliquait pas trop bien - J'ai le point de zoom comme vous l'avez décrit, mais je ne sais pas vraiment où commencer/terminer l'interpolation! J'ai pensé que je pouvais aller de 0, 0 au point cliqué et tenir compte de l'échelle à chaque point, mais c'est loin. Je suis encore assez nouveau à ce sujet, donc si vous pouviez me donner les bases ici ce serait génial, merci – jtrich