Simplemente puede agregar .setDraggable("draggable")
a una capa y podrá arrastrarlo mientras haya un objeto debajo del cursor. Puede agregar un rect
grande y transparente para que todo sea arrastrable. El zoom se puede lograr configurando la escala de la capa. En este ejemplo, lo estoy controlando a través de la rueda del mouse, pero es simplemente una función en la que se pasa la cantidad que desea ampliar (positivo para acercar, negativo para alejarse). Aquí está el código:
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/
Esto funciona muy bien, excepto en IE9. ¿Tendría alguna idea de por qué? La consola de depuración tampoco arroja ningún error ... – Legend
Parece que funciona si uso 'e.wheelDelta' en lugar de' e.wheelDeltaY'. ¿Alguna idea de por qué? – Legend
Creo que IE usa deltaY. El zoom de la rueda del mouse fue solo un ejemplo; si tiene la intención de conservarlo, debe usar un ajuste que compensa la diferencia en las implementaciones del navegador, como https://github.com/cobbweb/jquery-mousewheel – Duopixel