【发布时间】:2014-11-06 19:36:39
【问题描述】:
我有两个按钮可以放大和缩小我的画布动画
<button id="zoomInButton">Zoom ++</button>
<button id="zoomOutButton">Zoom -- </button>
<canvas id="myCanvasmatchPage" >
Sorry, your browser doesn't support canvas technology
</canvas>
我有一个使用 setInterval 和画布的动画循环(省略)。为了不让每个 setInterval 发生缩放,它必须在绘图函数循环之外。事实上 ctx.scale 在按钮点击时被重置。
$('#myCanvasmatchPage').attr({width:100,height:200}).css({width:'100px',height:'200px'});
var canvas = document.getElementById("myCanvasmatchPage");
ctx = canvas.getContext("2d");
ctx.translate(0.5,0.5);
var nextFrame =0;
var animationData = [];
var canvasZoom = 1; //initial is scale 100%
var incrementZoom = 0.05;
$("#zoomInButton").click(function ()
{
canvasZoom += incrementZoom;
ctx.scale(canvasZoom, canvasZoom);
});
$("#zoomOutButton").click(function ()
{
if (canvasZoom > 1){//i dont want to allow a less than 100% scale zoom
canvasZoom -= incrementZoom;
ctx.scale(canvasZoom, canvasZoom);
}
});
var draw = function(){
//cannot set scale within animation loop! keeps resetting!
ctx.clearRect(0, 0, canvas.width, canvas.height);
ctx.drawImage(images['background'], 0, 0, 622, 924, 0, 0, 311, 462);
if (nextFrame<=animationData.length){
//animation loop
}else{
clearTimeout(draw);//get out of the loop
return;
}
nextFrame++;
}
setInterval(draw,200);
我目前对这段代码的体验是 zoomIn '有效',但 zoomOut 没有。控制台日志向我显示,canvasZoom 确实上下一致地上下浮动 0.05(有时也是 0.05000001 哈哈),但画布不会负向缩放。
这让我觉得问题在于画布的清除而不是缩放。
【问题讨论】:
-
除了缩放(旋转/平移/倾斜)之外,您还打算做其他事情吗?
-
@GameAlchemist,实际上是的,旋转以及移动动画“中心点”的一种方式。
标签: javascript jquery animation html5-canvas