• 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>
    
    
    
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33
    • 34
    • 35
    • 36
    • 37
    • 38
    • 39
    • 40
    • 41
    • 42
    • 43
    • 44
    • 45
    • 46
    • 47
    • 48
    • 49
    • 50
    • 51
    • 52
    • 53
    • 54
    • 55
    • 56
    • 57
    • 58
    • 59
    • 60
    • 61
    • 62
    • 63
    • 64
    • 65
    • 66
    • 67
    • 68
    • 69
    • 70
    • 71
    • 72
    • 73
    • 74
    • 75
    • 76
    • 77
    • 78
    • 79
    • 80
    • 81
    • 82
    • 83
    • 84
    • 85
    • 86
    • 87
    • 88
    • 89
    • 90
    • 91
    • 92
    • 93
    • 94
    • 95
    • 96
    • 97
    • 98
    • 99
    • 100
    • 101
    • 102
    • 103
    • 104
    • 105
    • 106
    • 107
    • 108
    • 109
    • 110
    • 111
    • 112
    • 113
    • 114
    • 115
    • 116
    • 117
    • 118
    • 119
    • 120
    • 121
    • 122
    • 123
    • 124
    • 125
    • 126
    • 127

    🏠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
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33
    • 34
    • 35
    • 36
    • 37
    • 38
    • 39
    • 40
    • 41
    • 42
    • 43
    • 44
    • 45
    • 46
    • 47
    • 48
    • 49
    • 50
    • 51
    • 52
    • 53

    五、🎁更多源码

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

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

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

  • 相关阅读:
    爬虫:网站三次请求获取频道内容
    商业合作保密协议 (3)
    multipart
    无刷三相直流电机电动工具驱动方案设计
    数学建模算法与应用 插值与拟合
    2022-2028年全球与中国不可吸收PEEK缝合锚市场现状及未来发展趋势分析报告
    python-线程池的使用
    Git 详细教程之五:SSH 免密登陆 GitHub
    OLED根据数据手册显示一条直线
    SpringCloudAliBaba篇 (六) 之 Sentinel --> 分布式系统的流量防卫兵【详细】
  • 原文地址:https://blog.csdn.net/m0_73081085/article/details/127237758