当前位置: 首页 > news >正文

情人节定制:HTML5 Canvas全屏七夕爱心表白特效

❤️ 前言 

“这个世界乱糟糟的而你干干净净可以悬在我心上做太阳和月亮。”,七夕节表白日,你要错过吗?如果你言辞不善,羞于开口的话,可以使用 html5 canvas 制作浪漫的七夕爱心表白动画特效,全屏的爱心和表白语,了解一下! 

❤️ 效果图

❤️ 代码实现

<!DOCTYPE html>
<html lang="en">
<head><meta charset="UTF-8"><title>七夕520爱心表白</title><style>*{margin:0; padding:0;}body{ background-color: #1E1E1E; 		}</style>
</head>
<body><canvas id="drawHeart"></canvas><script>var hearts = [];var canvas = document.getElementById('drawHeart');var wW = window.innerWidth;var wH = window.innerHeight;// 创建画布var ctx = canvas.getContext('2d');// 创建图片对象var heartImage = new Image();heartImage.src = 'img/heart.svg';var num = 100;init();window.addEventListener('resize', function(){wW = window.innerWidth;wH = window.innerHeight;});// 初始化画布大小function init(){canvas.width = wW;canvas.height = wH;for(var i = 0; i < num; i++){hearts.push(new Heart(i%5));}requestAnimationFrame(render);}function getColor(){var val = Math.random() * 10;if(val > 0 && val <= 1){return '#00f';} else if(val > 1 && val <= 2){return '#f00';} else if(val > 2 && val <= 3){return '#0f0';} else if(val > 3 && val <= 4){return '#368';} else if(val > 4 && val <= 5){return '#666';} else if(val > 5 && val <= 6){return '#333';} else if(val > 6 && val <= 7){return '#f50';} else if(val > 7 && val <= 8){return '#e96d5b';} else if(val > 8 && val <= 9){return '#5be9e9';} else {return '#d41d50';}}function getText(){var val = Math.random() * 10;if(val > 1 && val <= 3){return '爱你一辈子';} else if(val > 3 && val <= 5){return '感谢你';} else if(val > 5 && val <= 8){return '喜欢你';} else{return 'I Love You';}}function Heart(type){this.type = type;// 初始化生成范围this.x = Math.random() * wW;this.y = Math.random() * wH;this.opacity = Math.random() * .5 + .5;// 偏移量this.vel = {x: (Math.random() - .5) * 5,y: (Math.random() - .5) * 5}this.initialW = wW * .5;this.initialH = wH * .5;// 缩放比例this.targetScale = Math.random() * .15 + .02; // 最小0.02this.scale = Math.random() * this.targetScale;// 文字位置this.fx = Math.random() * wW;this.fy = Math.random() * wH;this.fs = Math.random() * 10;this.text = getText();this.fvel = {x: (Math.random() - .5) * 5,y: (Math.random() - .5) * 5,f: (Math.random() - .5) * 2}}Heart.prototype.draw = function(){ctx.save();ctx.globalAlpha = this.opacity;ctx.drawImage(heartImage, this.x, this.y, this.width, this.height);ctx.scale(this.scale + 1, this.scale + 1);if(!this.type){// 设置文字属性ctx.fillStyle = getColor();ctx.font = 'italic ' + this.fs + 'px sans-serif';// 填充字符串ctx.fillText(this.text, this.fx, this.fy);}ctx.restore();}Heart.prototype.update = function(){this.x += this.vel.x;this.y += this.vel.y;if(this.x - this.width > wW || this.x + this.width < 0){// 重新初始化位置this.scale = 0;this.x = Math.random() * wW;this.y = Math.random() * wH;}if(this.y - this.height > wH || this.y + this.height < 0){// 重新初始化位置this.scale = 0;this.x = Math.random() * wW;this.y = Math.random() * wH;}// 放大this.scale += (this.targetScale - this.scale) * .1;this.height = this.scale * this.initialH;this.width = this.height * 1.4;// -----文字-----this.fx += this.fvel.x;this.fy += this.fvel.y;this.fs += this.fvel.f;if(this.fs > 50){this.fs = 2;}if(this.fx - this.fs > wW || this.fx + this.fs < 0){// 重新初始化位置this.fx = Math.random() * wW;this.fy = Math.random() * wH;}if(this.fy - this.fs > wH || this.fy + this.fs < 0){// 重新初始化位置this.fx = Math.random() * wW;this.fy = Math.random() * wH;}}function render(){ctx.clearRect(0, 0, wW, wH);for(var i = 0; i < hearts.length; i++){hearts[i].draw();hearts[i].update();}requestAnimationFrame(render);}</script>
</body>
</html>

🌹 最后,祝天下有情人终成眷属 🌹


http://www.lryc.cn/news/135883.html

相关文章:

  • 操作系统-笔记-第五章-输入输出管理
  • 感觉自己效率不高吗?学习实现目标的六个关键步骤,让你做任何事都事半功倍!
  • 【高级IO】- 五种 IO 模型 | 多路转接 - select
  • 在Linux搭建GitLab私有仓库配置实现远程访问私有仓库Gitlab ——【内网穿透】
  • ChatGPT应用于高职教育的四大潜在风险
  • uni-app在组件中内嵌webView,实现自定义webView的大小,并处理页面中有webview时其他元素点击事件失效的问题
  • 档案开发:增加查询和打卡按钮
  • redis基础细心讲解,一篇了解常用的缓存技术!
  • Three.js之几何体、高光材质、渲染器设置、gui
  • UE4如何连接dmx---摇头矩阵灯具的创建
  • 网络聊天室
  • ChatGPT只是玩具:生成式人工智能在不同行业的应用
  • RestFul的风格是什么
  • 【自制C/C++小项目JuLongEditor】使用Windows控制台API来制作一个简单的文本编辑器
  • 中国芯,寻找新赛道迫在眉睫
  • C++ 好用的格式化库--fmt
  • 微信小程序教学系列(3)
  • ORB-SLAM系列算法演进
  • solidity0.8.0的应用案例11:透明代理合约
  • 最新消息:谷歌将在Chromebook上运用UWB技术,无线通信更上一层
  • php+echarts实现数据可视化实例3
  • ubuntu下安装Sphinx,编译pdf
  • vue2.x项目从0到1(七)之用户权限
  • 上传镜像到阿里云的ACR
  • ahooks.js:一款强大的React Hooks库及其API使用教程(五)
  • MySQL TCL 事务控制
  • 【Ubuntu】从Graylog到Grafana Loki:构建更强大的网络设备管理和监控系统
  • [JavaWeb]【八】web后端开发-Mybatis
  • Flink源码之Checkpoint执行流程
  • 【工具使用】Git的使用