Um den Inhalt eines Canvaselements zoomen zu können ist ein kleiner Workaround notwendig. Zunächst wird ein Klon des bestehenden Canvaselements erstellt. In diesen wird der bisherige Inhalt geschrieben. Anschliessend wird der Inhalt mit Hilfe der Methode drawImage zurückgeschrieben und skaliert.
Mit der Schaltfläche können zwei Elemente in den Context gezeichnet werden. Mit + wird der Inhalt auf die doppelte Grösse gezoomt, mit dem - auf die Hälfte.
var intWidth = 400;
var intHeight = 400;
var strSrc = "zahnrad3.jpg";
function initCanvas(){
objCanvas = document.getElementById("canvas_id");
objCanvas.height = intHeight;
objCanvas.width = intWidth;
// Falls das Objekt unterstützt wird
if(objCanvas.getContext){
// Kontext
objContext = objCanvas.getContext('2d');
}else{
// Sonstiger Code
}
}
function drawSomeStuff(){
// Falls das Bildobjekt nicht existiert ODER ein anderes Bild angezeigt werden soll
// => Bild neu generieren und Funktion erneut aufrufen
if((typeof objImg=="undefined") || (objImg.src.search(new RegExp(strSrc))==-1)){
objImg = new Image();
objImg.onload = function(){
drawSomeStuff();
}
objImg.src = strSrc;
return;
}
clearIt(); // Canvas leeren
objContext.drawImage(objImg, 0, 0); // Bild zeichnen
objContext.strokeStyle = "rgba(255,0,0,1)"; // Rahmenfarbe rot
objContext.strokeRect(10, 10, 50, 30); // Rechteckrahmen zeichnen
}
function scaleIt(dblScaleX, dblScaleY){
// Dummy-Canvas erstellen und bisherigen Inhalt einfügen
var objCan = objCanvas.cloneNode(true);
objCan.getContext('2d').drawImage(objCanvas, 0, 0);
// Canvas leeren
clearIt();
// Inhalt skaliert zeichnen
objContext.drawImage(objCan, 0, 0, objCan.width*dblScaleX, objCan.height*dblScaleY);
}
function clearIt(){
objContext.clearRect(0, 0, objCanvas.width, objCanvas.height);
}
window.onload = initCanvas;
Voraussetzung ist ein existierendes Canvas-Element mit der ID canvas_id.