HTML5 画布缩放再次绘制
HTML5 canvas zoom draw again
目前我正在尝试使画布缩放并再次绘制整个画布
var painter = document.getElementById('painter');
var cp = painter.getContext('2d');
var scale = 1;
var originx = 0;
var savedData = [];
var originy = 0;
var zoom = 0;
$('#painter').on('mousewheel', function(event) {
var imgData = cp.getImageData(0, 0, painter.width, painter.height);
savedData.push(imgData);
var mousex = event.clientX - painter.offsetLeft;
var mousey = event.clientY - painter.offsetTop;
var wheel = event.deltaY;//n or -n
var zoom = 1 + wheel/2;
cp.translate(
originx,
originy
);
cp.scale(zoom,zoom);
cp.translate(
-( mousex / scale + originx - mousex / ( scale * zoom ) ),
-( mousey / scale + originy - mousey / ( scale * zoom ) )
);
if (savedData.length > 0) {
var imgData = savedData.pop();
cp.putImageData(imgData, 0, 0);
}
originx = ( mousex / scale + originx - mousex / ( scale * zoom ) );
originy = ( mousey / scale + originy - mousey / ( scale * zoom ) );
scale *= zoom;
});
问题是它不起作用。画布永远不会更新...变量似乎很好,因为我需要再次绘制整个画布,我将所有数据保存到一个数组中
getImageData & context.putImageData
是非常昂贵的操作。
相反,您可以将原始内容存储在第二个仅内存中画布中,该画布使用
var secondCanvas = document.createElement('canvas')
var secondContext = secondCanvas.getContext('2d');
secondCanvas.width=mainCanvas.width;
secondCanvas.height=mainCanvas.height;
secondContext.drawImage(mainCanvas,0,0);
然后使用第二个画布作为主画布上缩放绘图的图像源:
mainContext.drawImage(secondCanvas,x,y);
将内容缓存到第二个画布后,您可以使用此 Stackoverflow 答案通过鼠标滚轮进行缩放:
在动画 HTML5 画布中缩放和平移
相关文章:
- 更改高贴图的缩放级别
- 使用缩放脚本化事件绘制 HTML 图表
- HTML5 画布缩放再次绘制
- 画布绘制图像缩放
- 如何使用Javascript在SVG中绘制不可缩放的圆
- 通过HTML5画布上下文进行缩放,并在给定图像上绘制网格
- 在画布上绘制CSS转换(缩放、旋转、向左、向右)
- 如何在缩放后重新绘制DOM元素
- JavaScript<画布>绘制缩放图像
- HTML5 Canvas:使用/缓存drawImage绘制的元素在缩放和/或移动时被平滑
- 设置在Google api中绘制多边形的缩放选项
- 如何在图像上绘制形状,并允许在html页面上缩放
- 如何用Javascript在SVG中绘制不可缩放的文本
- 以编程方式绘制直线和直线在高图与缩放
- 如何用缩放选项绘制D3条形图
- 在iOS Safari中缩放和绘制图像到画布时,宽度是正确的,但高度被压扁了
- HTML5 Canvas:如何绘制在缩放时正确转换的恒定大小的图像
- D3.js图表调用并在缩放后重新绘制区域
- 在谷歌地图上绘制圆圈和缩放级别的问题
- 为所有缩放级别绘制一个恒定大小的圆圈