HTML5教程 超炫酷粒子效果的进度条
诗诗 2018-03-12 来源 :网络 阅读 1123 评论 0

摘要:这篇HTML5教程教大家编写基于HTML5和JavaScript的进度条应用,这款进度条插件非常有特点,它在进度展示的时候呈现粒子的动画效果,也就是说,进度条在滑动的同时,会产生一些小粒子掉落下来,效果非常酷。另外还有一个特点是随着进度的变化,进度条的颜色也会变化。

这篇HTML5教程教大家编写基于HTML5和JavaScript的进度条应用,这款进度条插件非常有特点,它在进度展示的时候呈现粒子的动画效果,也就是说,进度条在滑动的同时,会产生一些小粒子掉落下来,效果非常酷。另外还有一个特点是随着进度的变化,进度条的颜色也会变化。

 HTML5教程 超炫酷粒子效果的进度条

JavaScript代码

/*========================================================*/  /* Light Loader

/*========================================================*/var lightLoader = function(c, cw, ch){

 

var _this = this;

this.c = c;

this.ctx = c.getContext('2d');

this.cw = cw;

this.ch = ch;  

 

this.loaded = 0;

this.loaderSpeed = .6;

this.loaderHeight = 10;

this.loaderWidth = 310;    

this.loader = {

x: (this.cw/2) - (this.loaderWidth/2),

y: (this.ch/2) - (this.loaderHeight/2)

};

this.particles = [];

this.particleLift = 180;

this.hueStart = 0

this.hueEnd = 120;

this.hue = 0;

this.gravity = .15;

this.particleRate = 4;

 

/*========================================================*/

/* Initialize

/*========================================================*/

this.init = function(){

this.loop();

};

 

/*========================================================*/

/* Utility Functions

/*========================================================*/    

this.rand = function(rMi, rMa){return ~~((Math.random()*(rMa-rMi+1))+rMi);};

this.hitTest = function(x1, y1, w1, h1, x2, y2, w2, h2){return !(x1 + w1 < x2 || x2 + w2 < x1 || y1 + h1 < y2 || y2 + h2 < y1);};

 

/*========================================================*/

/* Update Loader

/*========================================================*/

this.updateLoader = function(){

if(this.loaded < 100){

this.loaded += this.loaderSpeed;

} else {

this.loaded = 0;

}

};

 

/*========================================================*/

/* Render Loader

/*========================================================*/

this.renderLoader = function(){

this.ctx.fillStyle = '#000';

this.ctx.fillRect(this.loader.x, this.loader.y, this.loaderWidth, this.loaderHeight);

 

this.hue = this.hueStart + (this.loaded/100)*(this.hueEnd - this.hueStart);

 

var newWidth = (this.loaded/100)*this.loaderWidth;

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

this.ctx.fillRect(this.loader.x, this.loader.y, newWidth, this.loaderHeight);

 

this.ctx.fillStyle = '#222';

this.ctx.fillRect(this.loader.x, this.loader.y, newWidth, this.loaderHeight/2);

};

 

/*========================================================*/

/* Particles

/*========================================================*/

this.Particle = function(){    

this.x = _this.loader.x + ((_this.loaded/100)*_this.loaderWidth) - _this.rand(0, 1);

this.y = _this.ch/2 + _this.rand(0,_this.loaderHeight)-_this.loaderHeight/2;

this.vx = (_this.rand(0,4)-2)/100;

this.vy = (_this.rand(0,_this.particleLift)-_this.particleLift*2)/100;

this.width = _this.rand(1,4)/2;

this.height = _this.rand(1,4)/2;

this.hue = _this.hue;

};

 

this.Particle.prototype.update = function(i){

this.vx += (_this.rand(0,6)-3)/100;

this.vy += _this.gravity;

this.x += this.vx;

this.y += this.vy;

 

if(this.y > _this.ch){

_this.particles.splice(i, 1);

}    

};

 

this.Particle.prototype.render = function(){

_this.ctx.fillStyle = 'hsla('+this.hue+', 100%, '+_this.rand(50,70)+'%, '+_this.rand(20,100)/100+')';

_this.ctx.fillRect(this.x, this.y, this.width, this.height);

};

 

this.createParticles = function(){

var i = this.particleRate;

while(i--){

this.particles.push(new this.Particle());

};

};

 

this.updateParticles = function(){    

var i = this.particles.length;      

while(i--){

var p = this.particles[i];

p.update(i);          

};      

};

 

this.renderParticles = function(){

var i = this.particles.length;      

while(i--){

var p = this.particles[i];

p.render();          

};    

};

 

/*========================================================*/

/* Clear Canvas

/*========================================================*/

this.clearCanvas = function(){

this.ctx.globalCompositeOperation = 'source-over';

this.ctx.clearRect(0,0,this.cw,this.ch);    

this.ctx.globalCompositeOperation = 'lighter';

};

 

/*========================================================*/

/* Animation Loop

/*========================================================*/

this.loop = function(){

var loopIt = function(){

requestAnimationFrame(loopIt, _this.c);

_this.clearCanvas();

 

_this.createParticles();

 

_this.updateLoader();

_this.updateParticles();

 

_this.renderLoader();

_this.renderParticles();

 

};

loopIt();    

};

 

};

/*========================================================*/ /* Check Canvas Support

/*========================================================*/var isCanvasSupported = function(){

var elem = document.createElement('canvas');

return !!(elem.getContext && elem.getContext('2d'));

};

/*========================================================*/ /* Setup requestAnimationFrame

/*========================================================*/var setupRAF = function(){

var lastTime = 0;

var vendors = ['ms', 'moz', 'webkit', 'o'];

for(var x = 0; x < vendors.length && !window.requestAnimationFrame; ++x){

window.requestAnimationFrame = window[vendors[x]+'RequestAnimationFrame'];

window.cancelAnimationFrame = window[vendors[x]+'CancelAnimationFrame'] || window[vendors[x]+'CancelRequestAnimationFrame'];

};

 

if(!window.requestAnimationFrame){

window.requestAnimationFrame = function(callback, element){

var currTime = new Date().getTime();

var timeToCall = Math.max(0, 16 - (currTime - lastTime));

var id = window.setTimeout(function() { callback(currTime + timeToCall); }, timeToCall);

lastTime = currTime + timeToCall;

return id;

};

};

 

if (!window.cancelAnimationFrame){

window.cancelAnimationFrame = function(id){

clearTimeout(id);

};

};

};  

/*========================================================*/ /* Define Canvas and Initialize

/*========================================================*/if(isCanvasSupported){

  var c = document.createElement('canvas');

  c.width = 400;

  c.height = 100;  

  var cw = c.width;

  var ch = c.height;

  document.body.appendChild(c);

  var cl = new lightLoader(c, cw, ch);    

 

  setupRAF();

  cl.init();

}

 

希望这篇文章可以帮助到你。总之,同学们,你想要的职坐标IT频道都能找到!

 


本文由 @诗诗 发布于职坐标。未经许可,禁止转载。
喜欢 | 0 不喜欢 | 0
看完这篇文章有何感觉?已经有0人表态,0%的人喜欢 快给朋友分享吧~
评论(0)
后参与评论

您输入的评论内容中包含违禁敏感词

我知道了

助您圆梦职场 匹配合适岗位
验证码手机号,获得海同独家IT培训资料
选择就业方向:
人工智能物联网
大数据开发/分析
人工智能Python
Java全栈开发
WEB前端+H5

请输入正确的手机号码

请输入正确的验证码

获取验证码

您今天的短信下发次数太多了,明天再试试吧!

提交

我们会在第一时间安排职业规划师联系您!

您也可以联系我们的职业规划师咨询:

小职老师的微信号:z_zhizuobiao
小职老师的微信号:z_zhizuobiao

版权所有 职坐标-一站式IT培训就业服务领导者 沪ICP备13042190号-4
上海海同信息科技有限公司 Copyright ©2015 www.zhizuobiao.com,All Rights Reserved.
 沪公网安备 31011502005948号    

©2015 www.zhizuobiao.com All Rights Reserved

208小时内训课程