私は今、何ヶ月もインスピレーションと問題解決の源として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のテスト値に減少します。これまでのところ、とても良いです。私の周り全体のアニメーションを有効にした場合、クリッピング矩形のための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);
});
、およびテストまで++ recWでそれを増やす:しかし、ここで最後の時間だらけ私を維持しています部分です値が200の場合、突然アニメーションが機能しなくなります。変数の段階的な増加は問題なく機能しますが、目に見えるクリッピング領域は成長しません。
私はおそらくちょうどここに明らかを見下ろす午前と思われるが、私は単にエラーを見つけるように見えることができず、誰かが正しい方向に私を指すことができれば、私は非常に感謝するだろう;)
感謝多くの場合
Tricon
を開始するには絶好の場所には、オンラインで完全なコードを公開することです。 [jsfiddle](http://jsfiddle.net/)に移動し、コードを実行して、それをよりうまく実行し、それを使って遊ぶことができます – puk
一度それを置くと、あなたのスニペットコード=) – puk
解決策は以下を参照してください。また、コメントに応答するときには、アンパサンド '@'にユーザ名を付けてください。この場合、あなたの回答の一番最初の行は '@ puk'だったはずです。これに対する例外は、質問/回答をした実際の人に返事をしてから、それをする必要がないときです。 – puk