Javascript画布动画
Javascript canvas animating
我想为我的web应用程序制作一个加载栏,并为此使用html画布。这是我用来填充画布的脚本:
<script>
var canvas = document.getElementById("bar");
var c = canvas.getContext("2d");
var xPos = 0;
draw = function() {
if(xPos < 300){
c.rect(0, 0, xPos, 30);
c.fill(255,0,0);
xPos += 0.5;
}
};
</script>
我在一个在线代码转换器(khan academy)上测试了这个代码,它成功了(当然没有前2行和大多数东西前面的c.),这也是我的问题,我不知道我必须把c.放在哪里?
我稍微简化了一下页面:
<!DOCTYPE html>
<html>
<head>
<link rel="stylesheet" type="text/css" href="test.css">
</head>
<body>
<canvas id="bar"></canvas>
<script>
var canvas = document.getElementById("bar");
var c = canvas.getContext("2d");
c.fillStyle = "#ff0000"
draw = function(){
if(xPos < 300){
c.fillRect(0, 0, xPos, 30);
xPos += 0.5;
}
};
</script>
</body>
</html>
无论你想画什么。。。这个:
draw = function(){
if(xPos < 300) {
c.fillRect(0, 0, xPos, 30);
xPos += 0.5;
}
};
它是全局上下文(window
对象的上下文)中变量的定义,然后为其分配一个函数。仅此而已,它仅定义行为。
您还需要执行(旁注:在画布实际创建后执行它——当您将代码放在画布标记后的script
标记中时——这就足够了,而且您已经执行了)。
要执行该功能,请使用:
draw();
或者根本不要将代码包装在函数中(除非它要被多次调用)。
或者使用语法构造来执行在适当位置创建的函数,如下所示:
(draw = function(){
if(xPos < 300) {
c.fillRect(0, 0, xPos, 30);
xPos += 0.5;
setTimeout(draw,15); // use this to achieve animation effect
}
})();
var xPos = 0;
var canvas = document.getElementById("bar");
var c = canvas.getContext("2d");
c.fillStyle = "#FF0000";
var draw;
(draw = function(){
if(xPos < 300) {
c.fillRect(0, 0, xPos, 30);
xPos += 0.5;
setTimeout(draw,15);
}
})();
#bar {
width: 300px;
height: 50px;
}
<canvas id="bar"></canvas>
编辑:我一直在考虑你可能需要什么,因为你想要什么并不完全显而易见。我已经创建了这个jsfiddle。也许这会有任何帮助。
嗯。。。
你把一些事情搞混了。试试这个:
<html>
<canvas id = "cvs1" width = "300" height = "30"></canvas>
</html>
对于脚本:
var c = document.getElementById("cvs1").getContext("2d");
c.fillStyle = "#ff0000" //Set Fill Color(Set to red)
if(xPos < 300){
c.fillRect(xPos, 0, 30, 30);
xPos += 0.5;
}
如果不是:
你所做的是分别使用fill和rect。您需要设置颜色,然后使用fillRect()函数绘制矩形。
编辑:你得到了x,y,宽度,高度作为宽度,高度,x,y。固定答案。
祝你好运!
您需要为每个动画步骤调用draw
。您可以使用setTimeout
、setInterval
或requestAnimationFrame
:
<!DOCTYPE html>
<html>
<head>
<link rel="stylesheet" type="text/css" href="test.css">
</head>
<body>
<canvas id="bar"></canvas>
<script>
var canvas = document.getElementById("bar");
var c = canvas.getContext("2d");
c.fillStyle = "#ff0000";
xPos=0;
draw = function(){
if(xPos < 300){
c.fillRect(0, 0, xPos, 30);
xPos += 0.5;
requestAnimationFrame(draw);
}
};
requestAnimationFrame(draw);
</script>
</body>
</html>
相关文章:
- 如何设置html元素填充的动画
- 如何使用动画实现纸张推车
- 如何在生成下载文件时显示加载动画
- 剑道网格jQuery动画()问题
- EaseJS拖放;放下(动画CC)电影剪辑的鼠标坐标
- jQuery Lazy加载动画滚动
- jquery动画可以通过编程链接吗
- Javascript将数学动画化
- 动画.CSS重播
- 制作一个不带HTML a标记但在动画播放完毕后指向其他页面的超链接
- jQuery,动画和动画返回.回调函数错误?:S
- 如何让 CSS3 动画在动画完成后保持其位置
- 为什么 JavaScript 执行会影响 Firefox 中的 css 动画和动画 gif
- 带有jquery的动画,动画/切换
- JavaScript动画,图像动画只动画一次
- 霓虹动画结束动画事件
- React Native -动画.还原动画时,Spring闪烁
- 关于函数和动画开始/动画结束事件的jQuery问题
- 动画.css动画之间的延迟
- 是什么导致这个简单的动画脚本动画不正确