- 使用 Spring Initializr 创建 Spring Boot 应用程序
- 在Spring Boot中配置Cassandra
- 在 Spring Boot 上配置 Tomcat 连接池
- 将Camel消息路由到嵌入WildFly的Artemis上
雷迪森安的乡亲们,欢迎来到老实人的前端课堂,这情人节的,我把爱心都给你们准备好了,今天我们来写个爱心吧。
注意看到最后哦,下面还有一个更好看的特效,这个是个动态的♥♥
<script src="https://wow.techbrood.com/libs/jquery/jquery-1.11.1.min.js"></script>
<canvas id="canvas"></canvas>
以下样式大部分是js代码渲染上dom后表现出来的
body {
margin: 0;
font-family: Helvetica, Arial;
font-weight: 100;
overflow: hidden;
}
canvas {
background-color: rgb(244, 244, 244);
}
footer {
position: fixed;
bottom: 0;
width: 100%;
}
footer img {
border-radius: 100%;
width: 30px;
height: 30px;
margin-left: 10px;
}
footer span {
display: block;
padding: 10px;
display: flex;
justify-content: flex-end;
align-items: center;
}
关键代码,满满注释哦,这我可够意思了哈,不懂的话再私下问我吧。
//---------- MAIN FUNCTION ----------
function init() {
renderable = [];
path = new Shape(new Heart(), new Point(cw / 2, ch / 2), new Color(244, 244, 244, 1), {
scale: 10
});
animate();
}
function animate() {
addShape(angle);
addShape(angle2);
angle += 0.05;
angle2 -= 0.05;
ctx.clearRect(0, 0, cw, ch);
for (var i = 0; i < renderable.length; i++) {
renderable[i].draw(canvas);
if (renderable[i].scale <= 0) renderable.splice(i, 1);
}
path.draw(canvas);
requestAnimationFrame(animate);
}
function addShape(angle) {
renderable.push(new Shape(new Circle(5), new Point(cw / 2, ch / 2), new Color(253, 192, 192, 1), {
position: (((path.geometry.getPositionByAngle(angle)).multiply(path.scale)).add(path.position.clone())),
decay: 0.1,
scale: 3
}));
}
//-----------------------------------
var canvas, ctx, cw, ch;
var FPS = 60;
var renderable = [],
path,
path2,
angle = 0,
angle2 = 0,
color;
var requestAnimationFrame = window.requestAnimationFrame || window.webkitRequestAnimationFrame || window.mozRequestAnimationFrame || window.msRequestAnimationFrame || function(callback) {
return setTimeout(callback, FPS);
};
window.onload = function() {
initCanvas();
ctx.clearRect(0, 0, cw, ch);
init();
}
window.onresize = function() {
initCanvas();
ctx.clearRect(0, 0, cw, ch);
};
function initCanvas() {
canvas = document.getElementById('canvas');
ctx = canvas.getContext('2d');
cw = window.innerWidth;
ch = window.innerHeight;
canvas.width = cw;
canvas.height = ch;
}
//---------------- APP UTIL ------------------
function getRandomNumber(min, max) {
return Math.random() * (max - min + 1) + min;
}
//---------- EXTRACT OF MY NEXT FRAMEWORK ------------
//----------- PROTOTYPES -------------
//===== GEOMETRY =====
//----- SHAPE -----
function Shape(geometry, position, color, properties) {
this.position = (position == null || position.classname != "Point") ? new Point() : position;
this.geometry = (geometry == null || geometry.constructor.name != "GenericObject") ? new Circle() : geometry;
this.color = (color == null || color.classname != "Color") ? null : color;
this.lineColor = null;
this.lineWidth = 1;
this.scale = 1;
this.decay = 0;
if (properties != null) this.setProperties(properties);
GenericObject.call(this, "Shape");
}
Shape.prototype = new GenericObject();
Shape.prototype.setProperties = function(properties) {
for (var p in properties) {
this[p] = properties[p];
}
}
Shape.prototype.draw = function(canvas) {
if (this.scale > 0) {
var ctx = canvas.getContext('2d');
var cw = canvas.width;
var ch = canvas.height;
ctx.beginPath();
if (this.lineWidth > 0 && (this.lineColor != null && this.lineColor.classname == "Color")) {
ctx.strokeStyle = this.lineColor.getRGBA();
ctx.lineWidth = this.lineWidth;
}
if (this.color != null && this.color.classname == "Color") {
ctx.fillStyle = this.color.getRGBA();
}
switch (this.geometry.classname) {
case "Circle":
ctx.arc(this.position.x, this.position.y, this.geometry.radius * this.scale, 0, Math.PI * 2);
break;
case "Heart":
for (var i = 0; i < Math.PI * 2; i += 0.05) {
var p = this.geometry.getPositionByAngle(i);
p.multiply(this.scale);
p.add(this.position);
if (i == 0) ctx.moveTo(p.x, p.y);
else ctx.lineTo(p.x, p.y);
}
break;
}
if (this.lineColor != null && this.lineColor.classname == "Color") ctx.stroke();
if (this.color != null) ctx.fill();
this.scale -= this.decay;
}
}
//----- POINT -----
function Point(x, y) {
this.x = (x != null && !isNaN(x)) ? x : 0;
this.y = (y != null && !isNaN(y)) ? y : 0;
GenericObject.call(this, "Point");
}
Point.prototype = new GenericObject();
Point.prototype.add = function(p2) {
if (p2.classname != this.classname) return null;
this.x += p2.x;
this.y += p2.y;
return this;
}
Point.prototype.multiply = function(scale) {
this.x *= scale;
this.y *= scale;
return this;
}
//----- CIRCLE -----
function Circle(radius) {
this.center = new Point();
this.radius = (radius != null && !isNaN(radius)) ? radius : 1;
GenericObject.call(this, "Circle");
}
Circle.prototype = new GenericObject();
//----- HEART -----
function Heart(scale) {
this.scale = (scale != null && !isNaN(scale)) ? scale : 1;
GenericObject.call(this, "Heart");
}
Heart.prototype = new GenericObject();
Heart.prototype.getPositionByAngle = function(angle) {
if (angle == null || isNaN(angle)) return null;
var x = 16 * Math.pow(Math.sin(angle), 3);
var y = -(13 * Math.cos(angle) - 5 * Math.cos(2 * angle) - 2 * Math.cos(3 * angle) - Math.cos(4 * angle));
return new Point(x * this.scale, y * this.scale);
}
//===== COLOR =====
function Color(r, g, b, a) {
this.r = (r != null || isNaN(r)) ? r : 0;
this.g = (g != null || isNaN(g)) ? g : 0;
this.b = (b != null || isNaN(b)) ? b : 0;
this.a = (a != null || isNaN(a)) ? a : 1;
this.hex = this.toHex();
GenericObject.call(this, "Color");
}
Color.prototype = new GenericObject();
Color.prototype.toHex = function() {
var bin = this.r << 16 | this.g << 8 | this.b;
return (function(h) {
return "#" + new Array(7 - h.length).join("0") + h
})(bin.toString(16).toUpperCase())
}
Color.prototype.getRGBA = function() {
return "rgba(" + this.r + "," + this.g + "," + this.b + "," + this.a + ")";
}
Color.prototype.setHex = function(hex) {
this.r = hex >> 16;
this.g = hex >> 8 & 0xFF;
this.b = hex & 0xFF;
this.hex = this.toHex();
}
//===== GENERICOBJECT =====
function GenericObject(name) {
this.classname = name;
}
GenericObject.prototype.clone = function() {
var copy = new GenericObject(this.classname);
for (var attr in this) {
if (this.hasOwnProperty(attr)) {
if (this[attr].constructor.name == "GenericObject") copy[attr] = this[attr].clone();
else copy[attr] = this[attr];
}
}
return copy;
}
不学没思路,看完是不是感觉也不难啊?你做出来了吗?
还有下面这个情人节代码我就不写了,更多表白代码可以在下方公z号获取~
1.1解决部署上线~> 部署上线工具(永久免费使用)
1.不需要买服务器就能部署线上,全世界都能访问你的连接啦, 这里给大家推荐一个程序员必备神器~ 简单易懂, 简直神器 ~ 需要可在下方公z号:前端老实人,获取
2.就是把你的代码效果做好了以后, 部署到线上, 把链接发给别人, 就可以让对方通过你的连接点击进去, 就能看到你的网页效果啦, 电脑端和手机端都可以噢! (不然别人看你的网页都要发文件过去,体验感不太好~)
博主为人老实,无偿解答问题,也会录制一些学习视频教同学们知识❤
如果对您有帮助,希望能给个👍/评论/收藏
您的三连~是对我创作最大的动力支持
关注:前端老实人👇领取源码哦~
我尝试理解[c代码 -> 汇编]代码 void node::Check( data & _data1, vector& _data2) { -> push ebp -> mov ebp,esp ->
我需要在当前表单(代码)的上下文中运行文本文件中的代码。其中一项要求是让代码创建新控件并将其添加到当前窗体。 例如,在Form1.cs中: using System.Windows.Forms; ..
我有此 C++ 代码并将其转换为 C# (.net Framework 4) 代码。有没有人给我一些关于 malloc、free 和 sprintf 方法的提示? int monate = ee; d
我的网络服务器代码有问题 #include #include #include #include #include #include #include int
给定以下 html 代码,将列表中的第三个元素(即“美丽”一词)以斜体显示的 CSS 代码是什么?当然,我可以给这个元素一个 id 或一个 class,但 html 代码必须保持不变。谢谢
关闭。这个问题不符合Stack Overflow guidelines .它目前不接受答案。 我们不允许提问寻求书籍、工具、软件库等的推荐。您可以编辑问题,以便用事实和引用来回答。 关闭 7 年前。
我试图制作一个宏来避免重复代码和注释。 我试过这个: #define GrowOnPage(any Page, any Component) Component.Width := Page.Surfa
我正在尝试将我的旧 C++ 代码“翻译”成头条新闻所暗示的 C# 代码。问题是我是 C# 中的新手,并不是所有的东西都像 C++ 中那样。在 C++ 中这些解决方案运行良好,但在 C# 中只是不能。我
在 Windows 10 上工作,R 语言的格式化程序似乎没有在 Visual Studio Code 中完成它的工作。我试过R support for Visual Studio Code和 R-T
我正在处理一些报告(计数),我必须获取不同参数的计数。非常简单但乏味。 一个参数的示例查询: qCountsEmployee = ( "select count(*) from %s wher
最近几天我尝试从 d00m 调试网络错误。我开始用尽想法/线索,我希望其他 SO 用户拥有可能有用的宝贵经验。我希望能够提供所有相关信息,但我个人无法控制服务器环境。 整个事情始于用户注意到我们应用程
我有一个 app.js 文件,其中包含如下 dojo amd 模式代码: require(["dojo/dom", ..], function(dom){ dom.byId('someId').i
我对“-gencode”语句中的“code=sm_X”选项有点困惑。 一个例子:NVCC 编译器选项有什么作用 -gencode arch=compute_13,code=sm_13 嵌入库中? 只有
我为我的表格使用 X-editable 框架。 但是我有一些问题。 $(document).ready(function() { $('.access').editable({
我一直在通过本教程学习 flask/python http://blog.miguelgrinberg.com/post/the-flask-mega-tutorial-part-i-hello-wo
我想将 Vim 和 EMACS 用于 CNC、G 代码和 M 代码。 Vim 或 EMACS 是否有任何语法或模式来处理这种类型的代码? 最佳答案 一些快速搜索使我找到了 this vim 和 thi
关闭。这个问题不符合Stack Overflow guidelines .它目前不接受答案。 想改进这个问题?更新问题,使其成为 on-topic对于堆栈溢出。 7年前关闭。 Improve this
这个问题在这里已经有了答案: Enabling markdown highlighting in Vim (5 个回答) 6年前关闭。 当我在 Vim 中编辑包含 Markdown 代码的 READM
我正在 Swift3 iOS 中开发视频应用程序。基本上我必须将视频 Assets 和音频与淡入淡出效果合并为一个并将其保存到 iPhone 画廊。为此,我使用以下方法: private func d
pipeline { agent any stages { stage('Build') { steps { e
我是一名优秀的程序员,十分优秀!