html canvas直线进度条,HTML5 canvas粒子飞射的loading进度条特效

这是一款使用HTML5 canvas制作的效果非常酷的loading进度条特效。该loading进度条在动画的时候会有粒子从进度条头部不断的飞射出来,并且进度条的颜色还会随机改变,非常有创意。

制作方法

HTML结构

这个loading进度条使用一个空的canvas来制作。

JAVASCRIPT

progressbar()函数用于绘制进度条,particle()函数用于绘制粒子。在draw()方法中判断当前进度条的总进度,在指定刻度时改变进度条的颜色。update()函数循环每一个粒子,不断的修改粒子的高度,从而制作出粒子飞射的效果。最后使用animloop()方法来不断的循环动画。

particle_no = 25;

window.requestAnimFrame = (function(){

return window.requestAnimationFrame ||

window.webkitRequestAnimationFrame ||

window.mozRequestAnimationFrame ||

window.oRequestAnimationFrame ||

window.msRequestAnimationFrame ||

function( callback ){

window.setTimeout(callback, 1000 / 60);

};

})();

var canvas = document.getElementsByTagName("canvas")[0];

var ctx = canvas.getContext("2d");

var counter = 0;

var particles = [];

var w = 400, h = 200;

canvas.width = w;

canvas.height = h;

function reset(){

ctx.fillStyle = "#272822";

ctx.fillRect(0,0,w,h);

ctx.fillStyle = "#171814";

ctx.fillRect(25,80,350,25);

}

function progressbar(){

this.widths = 0;

this.hue = 0;

this.draw = function(){

ctx.fillStyle = 'hsla('+this.hue+', 100%, 40%, 1)';

ctx.fillRect(25,80,this.widths,25);

var grad = ctx.createLinearGradient(0,0,0,130);

grad.addColorStop(0,"transparent");

grad.addColorStop(1,"rgba(0,0,0,0.5)");

ctx.fillStyle = grad;

ctx.fillRect(25,80,this.widths,25);

}

}

function particle(){

this.x = 23 + bar.widths;

this.y = 82;

this.vx = 0.8 + Math.random()*1;

this.v = Math.random()*5;

this.g = 1 + Math.random()*3;

this.down = false;

this.draw = function(){

ctx.fillStyle = 'hsla('+(bar.hue+0.3)+', 100%, 40%, 1)';;

var size = Math.random()*2;

ctx.fillRect(this.x, this.y, size, size);

}

}

bar = new progressbar();

function draw(){

reset();

counter++

bar.hue += 0.8;

bar.widths += 2;

if(bar.widths > 350){

if(counter > 215){

reset();

bar.hue = 0;

bar.widths = 0;

counter = 0;

particles = [];

}

else{

bar.hue = 126;

bar.widths = 351;

bar.draw();

}

}

else{

bar.draw();

for(var i=0;i

particles.push(new particle());

}

}

update();

}

function update(){

for(var i=0;i

var p = particles[i];

p.x -= p.vx;

if(p.down == true){

p.g += 0.1;

p.y += p.g;

}

else{

if(p.g<0){

p.down = true;

p.g += 0.1;

p.y += p.g;

}

else{

p.y -= p.g;

p.g -= 0.1;

}

}

p.draw();

}

}

function animloop() {

draw();

requestAnimFrame(animloop);

}

animloop();

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值