Javascript 画布上的动态矩形
我试着让小提琴中的每个矩形上下移动,使它看起来像一个音乐均衡器。我想让酒吧上下动画,但绝对不知道如何做动画。小提琴真的很有用:) HTMLJavascript 画布上的动态矩形,javascript,animation,canvas,Javascript,Animation,Canvas,我试着让小提琴中的每个矩形上下移动,使它看起来像一个音乐均衡器。我想让酒吧上下动画,但绝对不知道如何做动画。小提琴真的很有用:) HTML JavaScript var宽度=8; var距离=3; var c=document.getElementById(“myCanvas”); var ctx=c.getContext(“2d”); ctx.canvas.width=window.innerWidth; var total=ctx.canvas.width; var max=总计/2+
JavaScript
var宽度=8;
var距离=3;
var c=document.getElementById(“myCanvas”);
var ctx=c.getContext(“2d”);
ctx.canvas.width=window.innerWidth;
var total=ctx.canvas.width;
var max=总计/2+52;
var min=总计/2-60;
ctx.fillStyle=“黑色”;
ctx.globalAlpha=0.3;
对于(var x=0;x您需要使用勾号函数来更新您的画布
。您可以使用requestAnimationFrame()
,并选择要设置动画的时间间隔(您可以使用Date.now()
确定此时间间隔)
然后,保留一个条形图列表并更改其高度。然后将其重新渲染到您的画布上
这里是一些快速的黑客代码
var width = 8;
var distance = 3;
var c = document.getElementById("myCanvas");
var ctx = c.getContext("2d");
ctx.canvas.width = window.innerWidth;
var total = ctx.canvas.width;
var max = total / 2 + 52;
var min = total / 2 - 60;
ctx.fillStyle = "black";
ctx.globalAlpha = 0.3;
var lastDrawTime = Date.now();
var draw = function () {
if (Date.now() - lastDrawTime < 60) {
return webkitRequestAnimationFrame(draw);
}
ctx.clearRect(0, 0, c.width, c.height);
for (var x = 0; x < total; x += 12) {
if (x <= max && x >= min) {
var height = Math.floor(Math.random() * 40) + 5;
} else {
var height = Math.floor(Math.random() * 100) + 5;
}
ctx.fillRect(x, 100 - height, width, height);
}
lastDrawTime = Date.now();
webkitRequestAnimationFrame(draw);
};
draw();
var宽度=8;
var距离=3;
var c=document.getElementById(“myCanvas”);
var ctx=c.getContext(“2d”);
ctx.canvas.width=window.innerWidth;
var total=ctx.canvas.width;
var max=总计/2+52;
var min=总计/2-60;
ctx.fillStyle=“黑色”;
ctx.globalAlpha=0.3;
var lastDrawTime=Date.now();
var draw=函数(){
if(Date.now()-lastDrawTime<60){
返回webkitRequestAnimationFrame(绘制);
}
ctx.clearRect(0,0,c.宽度,c.高度);
对于(变量x=0;x
要制作动画,您必须清除画布并在每个帧的新位置重新绘制矩形,使用setInterval()
或setTimeout()
或requestAnimationFrame()
最好是使用requestAnimationFrame()
来适应每秒的帧数。我不知道这是否是您需要的效果,但它应该可以帮助您开始
requestAnimationFrame
用于在每一帧执行draw()。在指定的延迟后重新定义每个条,然后向下移动
var width = 8;
var distance = 3;
var c = document.getElementById("myCanvas");
var ctx = c.getContext("2d");
ctx.canvas.width = window.innerWidth;
var total = ctx.canvas.width;
var max = total/2+52;
var min = total/2-60;
ctx.fillStyle = "black";
ctx.globalAlpha=0.3;
var bars = [];
var barsCount = Math.floor(total / 12);
var barsLastRefreshTime = null;
var barsRefreshInterval = 500;
setInterval(function() {
for(var i = 0; i<barsCount; i++) {
var x = i * 12;
if(x<= max && x>=min) {
var height= Math.floor(Math.random()*40)+5;
} else {
var height= Math.floor(Math.random()*100)+5;
}
bars[i] = height;
}
barsLastRefreshTime = (new Date()).getTime();
}, barsRefreshInterval);
function draw() {
var currentTime = (new Date()).getTime();
var timePassedRate = (barsRefreshInterval - (currentTime - barsLastRefreshTime)) / barsRefreshInterval;
ctx.clearRect(0,0,c.width,c.height);
for(var i = 0; i<bars.length; i++) {
var x = i * 12;
var height = bars[i] * timePassedRate;
ctx.fillRect(x,100-height,width,height);
}
requestAnimationFrame(draw);
}
draw();
var宽度=8;
var距离=3;
var c=document.getElementById(“myCanvas”);
var ctx=c.getContext(“2d”);
ctx.canvas.width=window.innerWidth;
var total=ctx.canvas.width;
var max=总计/2+52;
var min=总计/2-60;
ctx.fillStyle=“黑色”;
ctx.globalAlpha=0.3;
var条=[];
var barsCount=数学楼层(总计/12);
var barsLastRefreshTime=null;
var barsRefreshInterval=500;
setInterval(函数(){
对于(var i=0;ifiddle真的很有帮助:)@user3374309添加了一个提琴。它很凌乱,但它应该为您指明正确的方向!我想您忘了保存您的fiddle@user3374309这些天你是怎么保存小提琴的?必须登录才能保存它…讨厌吧
var width = 8;
var distance = 3;
var c = document.getElementById("myCanvas");
var ctx = c.getContext("2d");
ctx.canvas.width = window.innerWidth;
var total = ctx.canvas.width;
var max = total / 2 + 52;
var min = total / 2 - 60;
ctx.fillStyle = "black";
ctx.globalAlpha = 0.3;
var lastDrawTime = Date.now();
var draw = function () {
if (Date.now() - lastDrawTime < 60) {
return webkitRequestAnimationFrame(draw);
}
ctx.clearRect(0, 0, c.width, c.height);
for (var x = 0; x < total; x += 12) {
if (x <= max && x >= min) {
var height = Math.floor(Math.random() * 40) + 5;
} else {
var height = Math.floor(Math.random() * 100) + 5;
}
ctx.fillRect(x, 100 - height, width, height);
}
lastDrawTime = Date.now();
webkitRequestAnimationFrame(draw);
};
draw();
var width = 8;
var distance = 3;
var c = document.getElementById("myCanvas");
var ctx = c.getContext("2d");
ctx.canvas.width = window.innerWidth;
var total = ctx.canvas.width;
var max = total/2+52;
var min = total/2-60;
ctx.fillStyle = "black";
ctx.globalAlpha=0.3;
var bars = [];
var barsCount = Math.floor(total / 12);
var barsLastRefreshTime = null;
var barsRefreshInterval = 500;
setInterval(function() {
for(var i = 0; i<barsCount; i++) {
var x = i * 12;
if(x<= max && x>=min) {
var height= Math.floor(Math.random()*40)+5;
} else {
var height= Math.floor(Math.random()*100)+5;
}
bars[i] = height;
}
barsLastRefreshTime = (new Date()).getTime();
}, barsRefreshInterval);
function draw() {
var currentTime = (new Date()).getTime();
var timePassedRate = (barsRefreshInterval - (currentTime - barsLastRefreshTime)) / barsRefreshInterval;
ctx.clearRect(0,0,c.width,c.height);
for(var i = 0; i<bars.length; i++) {
var x = i * 12;
var height = bars[i] * timePassedRate;
ctx.fillRect(x,100-height,width,height);
}
requestAnimationFrame(draw);
}
draw();