Nach viel kämpfen und sucht und versuchen, die Spitze von @Eric Rowell und den in dem entsandte Code versehen mit Zoom in on a point (using scale and translate) SO Frage bekam ich endlich den Zoom in und aus einem festen Punkt arbeiten mit KineticJS.
Hier ist eine funktionierende DEMO.
Und hier ist der Code:
var ui = {
stage: null,
scale: 1,
zoomFactor: 1.1,
origin: {
x: 0,
y: 0
},
zoom: function(event) {
event.preventDefault();
var evt = event.originalEvent,
mx = evt.clientX /* - canvas.offsetLeft */,
my = evt.clientY /* - canvas.offsetTop */,
wheel = evt.wheelDelta/120;
var zoom = (ui.zoomFactor - (evt.wheelDelta < 0 ? 0.2 : 0));
var newscale = ui.scale * zoom;
ui.origin.x = mx/ui.scale + ui.origin.x - mx/newscale;
ui.origin.y = my/ui.scale + ui.origin.y - my/newscale;
ui.stage.setOffset(ui.origin.x, ui.origin.y);
ui.stage.setScale(newscale);
ui.stage.draw();
ui.scale *= zoom;
}
};
$(function() {
var width = $(document).width() - 2,
height = $(document).height() - 5;
var stage = ui.stage = new Kinetic.Stage({
container: 'container',
width: width,
height: height
});
var layer = new Kinetic.Layer({
draggable: true
});
var rectX = stage.getWidth()/2 - 50;
var rectY = stage.getHeight()/2 - 25;
var box = new Kinetic.Circle({
x: 100,
y: 100,
radius: 50,
fill: '#00D200',
stroke: 'black',
strokeWidth: 2,
});
// add cursor styling
box.on('mouseover', function() {
document.body.style.cursor = 'pointer';
});
box.on('mouseout', function() {
document.body.style.cursor = 'default';
});
layer.add(box);
stage.add(layer);
$(stage.content).on('mousewheel', ui.zoom);
});
Danke: Dies kann durch sie Subtrahieren von den Leinwand-Offsets erreicht werden! Das funktioniert. Entschuldigung für die späte Antwort. – Skarbo
Hey danke, das funktioniert gut, aber ich habe viele Ebenen, so kann ich Ebenen nicht als "ziehbare" festlegen. deshalb setze ich die Bühne ziehbar. Wenn ich die Bühne beim Ziehen verschiebe, kann ich nicht auf den gewünschten Zoom-Punkt zoomen. Ich muss etwas neu berechnen, als zähle Stufe x und y, aber ich konnte nicht erreichen. Könntest du mir helfen? – magirtopcu
@ user1645941 Bitte teilen Sie einige Arbeitsbeispiele des Problems, mit denen Sie es zu tun haben (vielleicht als [Geige] (http://jsfiddle.net/)) und ich werde tun, was ich kann, um zu helfen. –