HTML5生日快乐在线网页祝福 (一场浪漫的烟花秀) HTML+CSS+JavaScript

❤ 精彩专栏推荐👇🏻👇🏻👇🏻
💂 作者主页: 【进入主页—🚀获取更多源码】
🎓 web前端期末大作业: 【📚HTML5网页期末作业 (1000套) 】
🧡 程序员有趣的告白方式:【💌HTML七夕情人节表白网页制作 (125套) 】
七夕来袭!是时候展现专属于程序员的浪漫了!你打算怎么给心爱的人表达爱意?鲜花礼物?代码表白?还是创意DIY?或者…无论那种形式,快来秀我们一脸吧!



二、📚网站介绍

📒网站文件方面:html网页结构文件、css网页样式文件、js网页特效文件、images网页图片文件;

📙网页编辑方面:可使用任意HTML编辑软件(如:Dreamweaver、HBuilder、Vscode 、Sublime 、Webstorm、Text 、Notepad++ 等任意html编辑软件进行运行及修改编辑等操作)。
其中:
(1)📜html文件包含:其中index.html是首页、其他html为二级页面;
(2)📑 css文件包含:css全部页面样式,3D动态效果,雪花飘落等等
(3)📄 js文件包含:页面炫酷效果实现


三、🔗网站效果

▶️1.视频演示

14-html5 canvas生日快乐文字烟花背景动画特效

🧩 2.图片演示

在这里插入图片描述


四、💒 网站代码

🧱HTML结构代码

<!DOCTYPE html>
<html lang="zh">
<head>
<meta charset="UTF-8">
<title>烟火</title>

<script src="js/jquery.min.js"></script>
<script src="js/canvas.js"></script>
<script src="js/deepCopy.js"></script>
<script src="js/Firework.js"></script>
	
</head>
<body>

<canvas id="canvas" width="500" height="500"></canvas>   

<script>
var canvas = $$("canvas"),
	ctx = canvas.getContext("2d"),
	g = 0.25,//模拟重力加速度
	n = 5,//一次性发射的烟火的数量
	fireworkList = [],//存放所有烟火对象
	//烟火形状                                                        圆形                                                              椭圆形                                                          爱心形
	fireworkTypeList = [createCircleFirework, createEllipseFirework, createHeartFirework],
	totalNum = 0,//发射烟火的总数量
	surprise_num = 25,//当发射烟火数量达到25时,发射生日快乐字样的烟火
	flag = true;//是否发射生日快乐字样的烟火
canvas.width = $(window).width() - 15;
canvas.height = $(window).height() - 20;



var init = function(firework,params){//初始化一个烟火
	var beforeBalst = firework.getBeforeBalst();
	firework.setCtx(ctx);
	firework.setStatus(1);//状态为点燃引线
	firework.setNum(100 + Math.floor(20 * Math.random()));//爆炸之后的烟花数量
	firework.setRoundness(getType(params) == "object" ? (getType(params.roundness) == "number" ? params.roundness : 0.25) : 0.25);//默认的规则度是0.25,这样爆炸的烟花与真实的最像
	//firework.setFireworkType(getType(params) == "object" ? params.fireworkType : fireworkTypeList[Math.floor(Math.random() * fireworkTypeList.length)]);//从三种形状中随机烟花形状
	firework.setFireworkType(getType(params) == "object" ? params.fireworkType : createCircleFirework);//默认圆形烟花
	firework.setDelay(Math.floor(30 * Math.random()));//引线燃烧的时间,单位为帧, 最多30帧,即0.5s
	beforeBalst.setAnimate({
		quiescence : {//发射位置为底部中间
			x : canvas.width / 2,
			y : canvas.height,
			deg : 0,
			zoom : 1
		},move : {//发射速度向量
			vx : -7 + 14 * Math.random(),
			vy : -22 + 4 * Math.random(),
			pal : 0,
			scale : 0
		},translate : {//发射加速度,有一个为g的重力加速度
			ax : 0,
			ay : g,
			apal : 0,
			scale : 0
		}
	});
	beforeBalst.setR(3);//烟火半径为3像素
	beforeBalst.setColor("#FFFFFF");//白色
	beforeBalst.setLife(50 + Math.floor(Math.random() * 50));//烟花从发射到爆炸的时间,单位为帧,即50-100帧后爆炸
	beforeBalst.setBase();//记录烟花发射的初始状态
}

for(var i = 0; i < n; i++){//初始化n个烟火
	var firework = Firework.getInstance();
	init(firework);
	fireworkList.push(firework);
	totalNum++;
}

var draw = function(){//描绘每一帧烟火的状态
	//整个canvas充满黑幕,模拟黑夜
	ctx.globalCompositeOperation = 'source-over';
	ctx.globalAlpha = 0.2;
	ctx.fillStyle = '#000003';
	ctx.fillRect(0, 0, canvas.width, canvas.height);
	//描绘每个烟火的状态
	ctx.globalCompositeOperation = 'screen';
	$.each(fireworkList,function(index,value){
		value.draw();
	});
	
};

var update = function(){//更新每一帧烟火的状态
	for(var i = fireworkList.length - 1; i >= 0; i--){
		fireworkList[i].update();//更新
		if(fireworkList[i].getStatus() == 5){//烟火消失
			fireworkList.splice(i,1);//在烟火集合中将这个烟火去除掉
			if(totalNum < surprise_num){//当发射烟火数量没到25
				var firework = Firework.getInstance();//继续生成新的烟火
				init(firework);
				fireworkList.push(firework);
				totalNum++;
			}  
			if(fireworkList.length == 0 && flag){//发射生日快乐烟火和一箭穿心烟火
				var firework = Firework.getInstance();
				init(firework,{fireworkType:createCustomFirework,roundness:1});
				fireworkList.push(firework);        			
				var firework2 = Firework.getInstance();
				init(firework2,{fireworkType:createDoubleHeartFirework,roundness:1});
				fireworkList.push(firework2);
				flag = false;
			}
		}
	}
}

var loop = function(){
	draw();
	update();						
	requestAnimationFrame(function(){//每秒触发60次的方法,因此动画是60帧的
		loop();
	});
};

loop();
</script>

</body>
</html>




🏠JS代码

/**
 * 获取变量类型
 */
function getType(obj){
    var toString = Object.prototype.toString;
    var map = {
       '[object Boolean]'  : 'boolean', 
       '[object Number]'   : 'number', 
       '[object String]'   : 'string', 
       '[object Function]' : 'function', 
       '[object Array]'    : 'array', 
       '[object Date]'     : 'date', 
       '[object RegExp]'   : 'regExp', 
       '[object Undefined]': 'undefined',
       '[object Null]'     : 'null', 
       '[object Object]'   : 'object'
   };
   if(obj instanceof Element) {
        return 'element';
   }
   return map[toString.call(obj)];
}

/**
 * 利用递归实现深拷贝
 */
function deepCopy(data){
    var type = getType(data);
    var obj;
    if(type === 'array'){
        obj = [];
    } else if(type === 'object'){
        obj = {};
    } else {
        //不再具有下一层次
        return data;
    }
    if(type === 'array'){
        for(var i = 0, len = data.length; i < len; i++){
            obj.push(deepCopy(data[i]));
        }
    } else if(type === 'object'){
        for(var key in data){
            obj[key] = deepCopy(data[key]);
        }
    }
    return obj;
}






五、🎁更多源码

1.如果我的博客对你有帮助 请 “👍点赞” “✍️评论” “💙收藏” 一键三连哦!

2.💗【👇🏻👇🏻👇🏻🉑关注我| 获取更多源码】 带您学习各种前端插件、3D炫酷效果、图片展示、文字效果、以及整站模板 、大学生毕业HTML模板 、等!

📣以上内容技术相关问题💌欢迎一起交流学习👇🏻👇🏻👇🏻

  • 17
    点赞
  • 63
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
谢谢您的祝福,但我是一个AI语言模型,无法感受到生日的喜悦和烟花的美丽。不过,如果您想制作一个生日快乐HTML网页烟花效果,可以使用CSS3动画和JavaScript实现。以下是一个简单的实现示例: ```html <!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title>生日快乐</title> <style> body { background: black; margin: 0; padding: 0; } .firework { position: absolute; width: 10px; height: 10px; background: #f00; border-radius: 50%; opacity: 1; animation: explode 1s ease-out forwards; } @keyframes explode { 0% { transform: scale(1); opacity: 1; } 50% { transform: scale(5); opacity: 0.5; } 100% { transform: scale(10); opacity: 0; } } </style> </head> <body> <script> function createFirework() { const firework = document.createElement('div'); firework.className = 'firework'; firework.style.left = Math.random() * window.innerWidth + 'px'; firework.style.top = Math.random() * window.innerHeight + 'px'; document.body.appendChild(firework); setTimeout(() => { firework.remove(); }, 1000); } setInterval(() => { createFirework(); }, 300); </script> </body> </html> ``` 通过 setInterval 定时调用 createFirework 函数来实现不断出现的烟花效果。createFirework 函数中,先创建一个 div 元素作为烟花元素,设置宽高、背景色、圆角等样式,然后随机设置其位置并添加到页面中。接着设置 setTimeout 定时器,1秒后将烟花元素从页面中移除。而烟花的爆炸效果则是通过 CSS3 动画实现,定义一个名为 explode 的关键帧动画,将烟花元素的缩放和透明度逐渐变化,使其看起来像是在爆炸。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

web学生网页设计

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值