几个月来,我一直使用 stackoverflow.com 作为灵感和解决问题的来源。到目前为止,我从来没有遇到过没有解决方案的问题,这就是我首先想在此介绍自己的原因,并与所有感兴趣的人分享我的问题。
在过去的几周里,我尝试在画布元素上设置某些形状和线条的动画,以创建一些有趣的效果 - 例如手写或类似效果。
为了实现这一点,我使用了一些利用 canvas 元素的 .clip() 命令的技术,来隐藏和逐渐显示预渲染图像(表单、线条......)“等待”的区域。我在这里遇到的问题与决定画布元素中剪切区域的变量有关。增加(但不减少)动画中的值似乎有一些奇怪的问题。
由于这一切听起来很奇怪,我知道,这是我正在谈论的代码的相关部分。
$(document).ready(function() {
var ctx = $( "#canvas" )[0].getContext("2d");
ctx.fillStyle = "#a00";
var recW = 200;
function animate() {
ctx.clearRect(0,0,400,400);
ctx.beginPath();
ctx.rect(50,50,recW,100);
ctx.clip();
ctx.beginPath();
ctx.arc(250,100,90,0,Math.PI*2,true);
ctx.fill();
recW--;
if (recW == 150) clearInterval(run);
}
var run = setInterval(function() { animate(); },60);
});
上面的代码工作得很好。它在 400*400 的画布中绘制一个矩形,将其用作剪切区域,然后绘制圆形,然后对这个圆形进行相应的剪切。通过动画间隔,剪裁矩形的长度减少到测试值 150。到目前为止,一切都很好。但是,让我连续数小时百思不得其解的部分来了:
$(document).ready(function() {
var ctx = $( "#canvas" )[0].getContext("2d");
ctx.fillStyle = "#a00";
var recW = 150;
function animate() {
ctx.clearRect(0,0,400,400);
ctx.beginPath();
ctx.rect(50,50,recW,100);
ctx.clip();
ctx.beginPath();
ctx.arc(250,100,90,0,Math.PI*2,true);
ctx.fill();
recW++;
if (recW == 200) clearInterval(run);
}
var run = setInterval(function() { animate(); },60);
});
如果我翻转整个动画,从剪裁矩形的宽度 150 开始,然后使用 recW++ 将其增加到测试值 200,突然动画不再起作用。变量的逐渐增加没有问题,但可见剪切区域没有增加。
我怀疑我可能只是在这里忽略了明显的问题,但我似乎根本找不到错误,如果有人能指出我正确的方向,我将非常感激;)
非常感谢
Tricon