HTML5 Canvas 从 A 点到 B 点的动画线
HTML5 Canvas animate line from point A to point B
我正在使用 HTML5 canvas 制作动画,我对这门语言还很陌生,所以我会边走边学。
动画是从A点到B点到C点到D点等"drawing"行(共13行)。
我已经能够用这段代码画线了:
<canvas id="myCanvas" width="220" height="600"></canvas>
<script>
var canvas = document.getElementById('myCanvas');
var context = canvas.getContext('2d');
context.beginPath();
context.moveTo(0, 2);
// LINE 1
context.lineTo(220, 2);
// LINE 2
context.lineTo(0, 30);
// LINE 3
context.lineTo(220, 30);
// LINE 4
context.lineTo(0, 60);
// LINE 5
context.lineTo(220, 60);
// LINE 6
context.lineTo(0, 90);
// LINE 7
context.lineTo(220, 90);
// LINE 8
context.lineTo(0, 120);
// LINE 9
context.lineTo(220, 120);
// LINE 10
context.lineTo(0, 150);
// LINE 11
context.lineTo(220, 150);
// LINE 12
context.lineTo(0, 180);
// LINE 13
context.lineTo(220, 180);
context.lineWidth = 2;
context.stroke();
</script>
但是,现在我希望能够一条一条地为线条制作动画。谁能帮我弄清楚我该怎么做?
这是一个JSfiddle
在每个 context.lineTo() 之后使用 context.stroke() 并在每个 context.stroke() 之后添加一个小延迟。
也许你可以做一个功能:
function drawLine(x, y) {
context.lineTo(x, y);
context.stroke();
}
然后做:
drawLine(220, 2);
setTimeout(function () {
drawLine(0, 30);
}, 200);
setTimeout(function () {
drawLine(220, 30);
}, 200);
....
编辑:
还要确保在开始时初始化上下文 strokewidth。
http://jsfiddle.net/6zv7jgo4/1/
这一个用于在 X 行之后清除:
http://jsfiddle.net/6zv7jgo4/2/
使用函数画线,像这样:
function drawLine(whichOne, context)
{
context.beginPath();
if (whichOne % 2 == 0)
{
context.moveTo(0,2 + (whichOne / 2) * 30);
context.lineTo(220, 2 + ((whichOne + 1) / 2) * 30);
}
else
{
context.moveTo(220,2 + (whichOne / 2) * 30);
context.lineTo(0, 2 + ((whichOne + 1) / 2) * 30);
}
context.lineWidth = 2;
context.stroke();
}
该函数会自动计算应该绘制的位置,具体取决于您要绘制的线条。
那你就用一个区间一条一条画线:
var counter = 0;
setInterval(function(){
if (counter > 1000000) {//or any other number
counter = 0;
context.clearRect(0, 0, 220, 600);
}
drawLine(counter,context);
counter++;
},1000);
完整代码:参见 jsfiddle!
我正在使用 HTML5 canvas 制作动画,我对这门语言还很陌生,所以我会边走边学。
动画是从A点到B点到C点到D点等"drawing"行(共13行)。
我已经能够用这段代码画线了:
<canvas id="myCanvas" width="220" height="600"></canvas>
<script>
var canvas = document.getElementById('myCanvas');
var context = canvas.getContext('2d');
context.beginPath();
context.moveTo(0, 2);
// LINE 1
context.lineTo(220, 2);
// LINE 2
context.lineTo(0, 30);
// LINE 3
context.lineTo(220, 30);
// LINE 4
context.lineTo(0, 60);
// LINE 5
context.lineTo(220, 60);
// LINE 6
context.lineTo(0, 90);
// LINE 7
context.lineTo(220, 90);
// LINE 8
context.lineTo(0, 120);
// LINE 9
context.lineTo(220, 120);
// LINE 10
context.lineTo(0, 150);
// LINE 11
context.lineTo(220, 150);
// LINE 12
context.lineTo(0, 180);
// LINE 13
context.lineTo(220, 180);
context.lineWidth = 2;
context.stroke();
</script>
但是,现在我希望能够一条一条地为线条制作动画。谁能帮我弄清楚我该怎么做?
这是一个JSfiddle
在每个 context.lineTo() 之后使用 context.stroke() 并在每个 context.stroke() 之后添加一个小延迟。
也许你可以做一个功能:
function drawLine(x, y) {
context.lineTo(x, y);
context.stroke();
}
然后做:
drawLine(220, 2);
setTimeout(function () {
drawLine(0, 30);
}, 200);
setTimeout(function () {
drawLine(220, 30);
}, 200);
....
编辑:
还要确保在开始时初始化上下文 strokewidth。
http://jsfiddle.net/6zv7jgo4/1/ 这一个用于在 X 行之后清除: http://jsfiddle.net/6zv7jgo4/2/
使用函数画线,像这样:
function drawLine(whichOne, context)
{
context.beginPath();
if (whichOne % 2 == 0)
{
context.moveTo(0,2 + (whichOne / 2) * 30);
context.lineTo(220, 2 + ((whichOne + 1) / 2) * 30);
}
else
{
context.moveTo(220,2 + (whichOne / 2) * 30);
context.lineTo(0, 2 + ((whichOne + 1) / 2) * 30);
}
context.lineWidth = 2;
context.stroke();
}
该函数会自动计算应该绘制的位置,具体取决于您要绘制的线条。
那你就用一个区间一条一条画线:
var counter = 0;
setInterval(function(){
if (counter > 1000000) {//or any other number
counter = 0;
context.clearRect(0, 0, 220, 600);
}
drawLine(counter,context);
counter++;
},1000);
完整代码:参见 jsfiddle!