我更新了你的小提琴,包括兩種不同的方式來放大,一個做了重繪,並會給你更好的分辨率。另一個是選定區域的簡單縮放比例,並導致模糊縮放。
http://jsfiddle.net/37bs7o3a/1/
$(document).ready(function(){
var graph = $('#graph');
var l = graph[0].getContext('2d');
function draw(l) {
l.beginPath();
l.moveTo(50, 50);
l.lineTo(50, 350);
l.lineTo(450, 350);
l.stroke();
l.beginPath();
l.moveTo(100,250);
l.lineTo(450,200);
l.stroke();
l.beginPath();
l.rect(200, 225, 2, 2);
l.stroke();
}
draw(l);
function redrawZoom(srcCtx, drawFn, x, y, scale, dx, dy, dw, dh) {
var can = document.createElement('canvas');
var ctx = can.getContext('2d');
can.width = srcCtx.canvas.width;
can.height = srcCtx.canvas.height;
ctx.scale(scale, scale);
ctx.translate(-x, -y);
drawFn(ctx);
// draw zoomed canvas on graph
// sy, sy, sw, sh, dx, dy, dw, dh
l.drawImage(can, 0, 0, dw, dh, dx, dy, dw, dh);
// Draw zoom box
l.strokeStyle = "rgba(0,0,255,.5)"
l.rect(dx, dy, dw, dh);
l.stroke();
return can;
}
redrawZoom(l, draw, 190, 215, 3, 100, 75, 75, 75);
function blurryZoom(ctx, x, y, w, h, scale, dx, dy) {
// zoom outline
ctx.beginPath();
ctx.rect(190, 215, w, h);
ctx.strokeStyle = "rgba(255,0,0,.5)"
ctx.stroke();
// zoom - Blurry Zoom
l.drawImage(ctx.canvas,190,215,w,h,dx,dy,w*scale,h*scale);
}
blurryZoom(l, 190, 215, 25, 25, 3, 175, 75);
});
非常感謝。 drawImage和創建一個新的畫布幫助我。 –