2024将至,前端程序员们应该一起放个烟花庆祝一下,走起

}

lastTime = newTime;

console.log(bigbooms)

}

stars.foreach(function(){

this.paint();

})

drawMoon();

bigbooms.foreach(function(index){

var that = this;

if(!this.dead){

this._move();

this._drawLight();

}

else{

this.booms.foreach(function(index){

if(!this.dead) {

this.moveTo(index);

}

else if(index === that.booms.length-1){

bigbooms[bigbooms.indexOf(that)] = null;

}

})

}

});

raf(animate);

}

function drawMoon(){

var moon = document.getElementById(“moon”);

var centerX = canvas.width-200 , centerY = 100 , width = 80;

if(moon.complete){

ctx.drawImage(moon , centerX , centerY , width , width )

}

else {

moon.onload = function(){

ctx.drawImage(moon ,centerX , centerY , width , width)

}

}

var index = 0;

for(var i=0;i<10;i++){

ctx.save();

ctx.beginPath();

ctx.arc(centerX+width/2 , centerY+width/2 , width/2+index , 0 , 2*Math.PI);

ctx.fillStyle=“rgba(240,219,120,0.005)”;

index+=2;

ctx.fill();

ctx.restore();

}

}

Array.prototype.foreach = function(callback){

for(var i=0;i<this.length;i++){

if(this[i]!==null) callback.apply(this[i] , [i])

}

}

var raf = window.requestAnimationFrame || window.webkitRequestAnimationFrame || window.mozRequestAnimationFrame || window.oRequestAnimationFrame || window.msRequestAnimationFrame || function (callback) { window.setTimeout(callback, 1000 / 60); };

canvas.onclick = function(){

var x = event.clientX;

var y = event.clientY;

var bigboom = new Boom(getRandom(canvas.width/3,canvas.width*2/3) ,2,“#FFF” , {x:x , y:y});

bigbooms.push(bigboom)

}

// canvas.addEventLisener(“touchstart” , function(event){

// var touch = event.targetTouches[0];

// var x = event.pageX;

// var y = event.pageY;

// var bigboom = new Boom(getRandom(canvas.width/3,canvas.width*2/3) ,2,“#FFF” , {x:x , y:y});

// bigbooms.push(bigboom)

// })

var Boom = function(x,r,c,boomArea,shape){

this.booms = [];

this.x = x;

this.y = (canvas.height+r);

this.r = r;

this.c = c;

this.shape = shape || false;

this.boomArea = boomArea;

this.theta = 0;

this.dead = false;

this.ba = parseInt(getRandom(80 , 100));

}

Boom.prototype = {

_paint:function(){

ctx.save();

ctx.beginPath();

ctx.arc(this.x,this.y,this.r,0,2*Math.PI);

ctx.fillStyle = this.c;

ctx.fill();

ctx.restore();

},

_move:function(){

var dx = this.boomArea.x - this.x , dy = this.boomArea.y - this.y;

this.x = this.x+dx*0.01;

this.y = this.y+dy*0.01;

if(Math.abs(dx)<=this.ba && Math.abs(dy)<=this.ba){

if(this.shape){

this._shapBoom();

}

else this._boom();

this.dead = true;

}

else {

this._paint();

}

},

_drawLight:function(){

ctx.save();

ctx.fillStyle = “rgba(255,228,150,0.3)”;

ctx.beginPath();

ctx.arc(this.x , this.y , this.r+3Math.random()+1 , 0 , 2Math.PI);

ctx.fill();

ctx.restore();

},

_boom:function(){

var fragNum = getRandom(30 , 200);

var style = getRandom(0,10)>=5? 1 : 2;

var color;

if(style===1){

color = {

a:parseInt(getRandom(128,255)),

b:parseInt(getRandom(128,255)),

c:parseInt(getRandom(128,255))

}

}

var fanwei = parseInt(getRandom(300, 400));

for(var i=0;i<fragNum;i++){

if(style===2){

color = {

a:parseInt(getRandom(128,255)),

b:parseInt(getRandom(128,255)),

c:parseInt(getRandom(128,255))

}

}

var a = getRandom(-Math.PI, Math.PI);

var x = getRandom(0, fanwei) * Math.cos(a) + this.x;

var y = getRandom(0, fanwei) * Math.sin(a) + this.y;

var radius = getRandom(0 , 2)

var frag = new Frag(this.x , this.y , radius , color , x , y );

this.booms.push(frag);

}

},

_shapBoom:function(){

var that = this;

putValue(ocas , octx , this.shape , 5, function(dots){

var dx = canvas.width/2-that.x;

var dy = canvas.height/2-that.y;

for(var i=0;i<dots.length;i++){

color = {a:dots[i].a,b:dots[i].b,c:dots[i].c}

var x = dots[i].x;

var y = dots[i].y;

var radius = 1;

var frag = new Frag(that.x , that.y , radius , color , x-dx , y-dy);

that.booms.push(frag);

}

})

}

}

function putValue(canvas , context , ele , dr , callback){

context.clearRect(0,0,canvas.width,canvas.height);

var img = new Image();

if(ele.innerHTML.indexOf(“img”)>=0){

img.src = ele.getElementsByTagName(“img”)[0].src;

imgload(img , function(){

context.drawImage(img , canvas.width/2 - img.width/2 , canvas.height/2 - img.width/2);

dots = getimgData(canvas , context , dr);

callback(dots);

})

}

else {

var text = ele.innerHTML;

context.save();

var fontSize =200;

context.font = fontSize+“px 宋体 bold”;

context.textAlign = “center”;

context.textBaseline = “middle”;

context.fillStyle = “rgba(”+parseInt(getRandom(128,255))+“,”+parseInt(getRandom(128,255))+“,”+parseInt(getRandom(128,255))+" , 1)";

context.fillText(text , canvas.width/2 , canvas.height/2);

context.restore();

dots = getimgData(canvas , context , dr);

callback(dots);

}

}

function imgload(img , callback){

if(img.complete){

callback.call(img);

}

else {

img.onload = function(){

callback.call(this);

}

}

}

function getimgData(canvas , context , dr){

var imgData = context.getImageData(0,0,canvas.width , canvas.height);

context.clearRect(0,0,canvas.width , canvas.height);

var dots = [];

for(var x=0;x<imgData.width;x+=dr){

for(var y=0;y<imgData.height;y+=dr){

var i = (y*imgData.width + x)*4;

if(imgData.data[i+3] > 128){

var dot = {x:x , y:y , a:imgData.data[i] , b:imgData.data[i+1] , c:imgData.data[i+2]};

dots.push(dot);

}

}

}

return dots;

}

function getRandom(a , b){

return Math.random()*(b-a)+a;

}

var maxRadius = 1 , stars=[];

function drawBg(){

for(var i=0;i<100;i++){

var r = Math.random()*maxRadius;

var x = Math.random()*canvas.width;

var y = Math.random()2canvas.height - canvas.height;

var star = new Star(x , y , r);

stars.push(star);

star.paint()

}

}

var Star = function(x,y,r){

this.x = x;this.y=y;this.r=r;

}

Star.prototype = {

paint:function(){

ctx.save();

ctx.beginPath();

ctx.arc(this.x , this.y , this.r , 0 , 2*Math.PI);

ctx.fillStyle = “rgba(255,255,255,”+this.r+“)”;

ctx.fill();

ctx.restore();

最后

自我介绍一下,小编13年上海交大毕业,曾经在小公司待过,也去过华为、OPPO等大厂,18年进入阿里一直到现在。

深知大多数初中级Android工程师,想要提升技能,往往是自己摸索成长,自己不成体系的自学效果低效漫长且无助。

因此收集整理了一份《2024年Web前端开发全套学习资料》,初衷也很简单,就是希望能够帮助到想自学提升又不知道该从何学起的朋友,同时减轻大家的负担。

img

既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,基本涵盖了95%以上Android开发知识点!不论你是刚入门Android开发的新手,还是希望在技术上不断提升的资深开发者,这些资料都将为你打开新的学习之门!

如果你觉得这些内容对你有帮助,需要这份全套学习资料的朋友可以戳我获取!!

由于文件比较大,这里只是将部分目录截图出来,每个节点里面都包含大厂面经、学习笔记、源码讲义、实战项目、讲解视频,并且会持续更新!
长,自己不成体系的自学效果低效漫长且无助。**

因此收集整理了一份《2024年Web前端开发全套学习资料》,初衷也很简单,就是希望能够帮助到想自学提升又不知道该从何学起的朋友,同时减轻大家的负担。

[外链图片转存中…(img-c4lsktKI-1714811565451)]

[外链图片转存中…(img-So7h0drX-1714811565451)]

[外链图片转存中…(img-5lkIslco-1714811565452)]

既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,基本涵盖了95%以上Android开发知识点!不论你是刚入门Android开发的新手,还是希望在技术上不断提升的资深开发者,这些资料都将为你打开新的学习之门!

如果你觉得这些内容对你有帮助,需要这份全套学习资料的朋友可以戳我获取!!

由于文件比较大,这里只是将部分目录截图出来,每个节点里面都包含大厂面经、学习笔记、源码讲义、实战项目、讲解视频,并且会持续更新!

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值