Sie können einfach .setDraggable("draggable")
zu einer Ebene hinzufügen, und Sie können sie ziehen, solange sich ein Objekt unter dem Cursor befindet. Sie könnten eine große, transparente rect
hinzufügen, um alles ziehbar zu machen. Der Zoom kann durch Einstellen der Skalierung der Ebene erreicht werden. In diesem Beispiel steuere ich es über das Mausrad, aber es ist einfach eine Funktion, bei der Sie den zu vergrößernden Betrag übergeben (positiv zum Vergrößern, negativ zum Herauszoomen). Hier ist der Code:
var stage = new Kinetic.Stage({
container: "canvas",
width: 500,
height: 500
});
var draggableLayer = new Kinetic.Layer();
draggableLayer.setDraggable("draggable");
//a large transparent background to make everything draggable
var background = new Kinetic.Rect({
x: -1000,
y: -1000,
width: 2000,
height: 2000,
fill: "#000000",
opacity: 0
});
draggableLayer.add(background);
//don't mind this, just to create fake elements
var addCircle = function(x, y, r){
draggableLayer.add(new Kinetic.Circle({
x: x*700,
y: y*700,
radius: r*20,
fill: "rgb("+ parseInt(255*r) +",0,0)"
})
);
}
var circles = 300
while (circles) {
addCircle(Math.random(),Math.random(), Math.random())
circles--;
}
var zoom = function(e) {
var zoomAmount = e.wheelDeltaY*0.001;
draggableLayer.setScale(draggableLayer.getScale().x+zoomAmount)
draggableLayer.draw();
}
document.addEventListener("mousewheel", zoom, false)
stage.add(draggableLayer)
http://jsfiddle.net/zAUYd/
Das funktioniert gut außer in IE9. Hättest du eine Ahnung, warum? Die Debug-Konsole wirft auch keine Fehler ... – Legend
Sieht aus wie es funktioniert, wenn ich "e.wheelDelta" anstelle von "e.wheelDeltaY" verwende. Irgendeine Idee warum? – Legend
Ich denke, dass IE deltaY verwendet. Der Mausradzoom war nur ein Beispiel, wenn Sie beabsichtigen, ihn zu behalten, dann sollten Sie einen Shim verwenden, der den Unterschied in Browserimplementierungen wie https://github.com/cobbweb/jquery-mousewheel kompensiert. – Duopixel