आप बस एक परत में .setDraggable("draggable")
जोड़ सकते हैं और जब तक कर्सर के नीचे कोई ऑब्जेक्ट नहीं है तब तक आप इसे खींच सकेंगे। आप सब कुछ खींचने योग्य बनाने के लिए एक बड़ा, पारदर्शी rect
जोड़ सकते हैं। ज़ूम को परत के पैमाने को सेट करके हासिल किया जा सकता है। इस उदाहरण में मैं इसे मूसहेल के बावजूद नियंत्रित कर रहा हूं, लेकिन यह केवल एक ऐसा कार्य है जहां आप उस राशि को पार करते हैं जिसे आप ज़ूम करना चाहते हैं (ज़ूम इन करने के लिए सकारात्मक, ज़ूम आउट करने के लिए नकारात्मक)।
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/
यह IE9 को छोड़कर महान काम करता है। क्या आपको कोई विचार होगा कि क्यों? डीबग कंसोल किसी भी त्रुटि को फेंक नहीं देता है ... – Legend
ऐसा लगता है कि अगर मैं 'e.wheelDeltaY' के बजाय 'e.wheelDelta' का उपयोग करता हूं तो यह काम करता है। कोई विचार क्यों? – Legend
मुझे लगता है कि आईई डेल्टाई का उपयोग करता है। मूसहेल ज़ूम सिर्फ एक उदाहरण था, यदि आप इसे रखने का इरादा रखते हैं तो आपको एक शिम का उपयोग करना चाहिए जो ब्राउज़र कार्यान्वयन में अंतर के लिए बनाता है जैसे कि https://github.com/cobbweb/jquery-mousewheel – Duopixel