HTML李峋同款跳动的爱心代码(双爱心版)

目录

写在前面

跳动的爱心

完整代码

代码分析

系列推荐

最后想说


写在前面

在浩瀚的网络世界中,总有一些小惊喜能触动我们的心弦。今天,就让我们用HTML语言,探索既神秘又浪漫的李峋同款跳动的爱心代码吧。

首先,让我们一起来欣赏一下这个跳动的爱心代码所带来的视觉效果。当这段代码被嵌入到你的网页中时,一个由无数小圆点组成的爱心形状会开始在屏幕上跳动。这些小圆点如同爱情的精灵,在屏幕上翩翩起舞,让人仿佛置身于一个梦幻般的爱情世界。

图片

跳动的爱心

那么,这个跳动的爱心代码是如何实现的呢?其实,它主要利用了HTML的<canvas>元素和JavaScript的绘图功能。通过绘制大量的小圆点,并让它们按照一定的规律进行移动和变化,就能够模拟出爱心跳动的视觉效果。

完整代码

<!DOCTYPE html>
<html lang="en">

<head>
	<meta charset="UTF-8">
	<meta http-equiv="X-UA-Compatible" content="IE=edge">

	<title>Love</title>
	<style>
		body {
			filter: blur(0.5px);
			background: #000;
		}

		canvas {
			display: block;
			margin: 0 auto;
		}

		h1 {
			color: white;
			position: absolute;
			top: 45%;
			left: 50%;
			transform: translate(-50%, -50%);
			text-align: center;
			font-weight: 400;
		}
	</style>
</head>

<body>
	<!-- <h1><i>Love</i></h1> -->
	<canvas id="heart"></canvas>

</body>

</html>
<script>
	var canvas = document.getElementById("heart");
	canvas.width = 600;
	canvas.height = 600;
	canvas.style.width = canvas.width + "px";
	canvas.style.height = canvas.height + "px";

	var context = canvas.getContext("2d");
	context.translate(canvas.width / 2, canvas.height / 2);
	context.scale(1, -1);
	context.moveTo(0, 0);
	context.fillStyle = 'deeppink'

	function xin(t, r, j, ws) {
		this.trans = t;
		this.rs = r,
			this.ws = ws,
			this.index = j,
			this.x = this.trans * this.ws * Math.sin(this.index) * Math.sin(this.index) * Math.sin(this.index)
		this.y = this.trans * (16 * Math.cos(this.index) - 5 * Math.cos(2 * this.index) - 2 * Math.cos(3 * this.index) - Math.cos(4 * this.index));
	}

	let ws = 18;
	let hs = 16;
	let wsSpeed = 1;
	let hsSpeed = 1;
	let speed = 1;

	let wqs = [];
	let nqs = [];
	let hxz = [];
	let hxz2 = [];
	let dc = [];

	let xings = [wqs, nqs, hxz, hxz2, dc];

	sdata();

	function sdata() {
		// 外圈
		for (let j = 0; j < 500; j += speed) {
			let trans = 9 + Math.random() * 2.5;
			let size = Math.random() * 2;
			let xins = new xin(trans, size, j, ws);
			wqs.push(xins);
		}

		// 内圈
		for (let j = 0; j < 300; j += speed) {
			let trans = 7 + Math.random() * 5;
			let size = Math.random() * 2.5;
			let xins = new xin(trans, size, j, ws);
			nqs.push(xins);
		}

		// 核心轴
		for (let j = 0; j < 600; j += speed) {
			let trans = 11 + Math.random() * 2;
			let size = Math.random() * 3.5;
			let xins = new xin(trans, size, j, ws);
			hxz.push(xins);
		}

		// 核心轴2
		for (let j = 0; j < 500; j += speed) {
			let trans = 0 + Math.random() * 2.7;
			let size = Math.random() * 2.5;
			let xins = new xin(trans, size, j, ws);
			hxz2.push(xins);
		}

		setInterval(() => {
			context.clearRect(-canvas.width / 2, -canvas.height / 2, canvas.width, canvas.height);
			ws += wsSpeed;
			if (ws < 16) {
				wsSpeed *= -1;
			} else if (ws > 18) {
				wsSpeed *= -1;
			}
			hs += hsSpeed;
			if (hs < 14) {
				hsSpeed *= -1;
			} else if (hs > 16) {
				hsSpeed *= -1;
			}

			hxz.forEach(v => {
				context.beginPath();
				context.arc(v.trans * ws * Math.sin(v.index) * Math.sin(v.index) * Math.sin(v.index), v.trans * (hs * Math.cos(v.index) - 5 * Math.cos(2 * v.index) - 2 * Math.cos(3 * v.index) - Math.cos(4 * v.index)), v.rs, 0, Math.PI * 2);
				context.fill();
				context.stroke();
				context.closePath();
			});
			hxz2.forEach(v => {
				context.beginPath();
				context.arc(v.trans * ws * Math.sin(v.index) * Math.sin(v.index) * Math.sin(v.index), v.trans * (hs * Math.cos(v.index) - 5 * Math.cos(2 * v.index) - 2 * Math.cos(3 * v.index) - Math.cos(4 * v.index)), v.rs, 0, Math.PI * 2);
				context.fill();
				context.stroke();
				context.closePath();
			});

			nqs.forEach(v => {
				context.beginPath();
				context.arc(v.trans * ws * Math.sin(v.index) * Math.sin(v.index) * Math.sin(v.index), v.trans * (hs * Math.cos(v.index) - 5 * Math.cos(2 * v.index) - 2 * Math.cos(3 * v.index) - Math.cos(4 * v.index)), v.rs, 0, Math.PI * 2);
				context.fill();
				context.stroke();
				context.closePath();
			});

			wqs.forEach(v => {
				context.beginPath();
				context.arc(v.trans * ws * Math.sin(v.index) * Math.sin(v.index) * Math.sin(v.index), v.trans * (hs * Math.cos(v.index) - 5 * Math.cos(2 * v.index) - 2 * Math.cos(3 * v.index) - Math.cos(4 * v.index)), v.rs, 0, Math.PI * 2);
				context.fill();
				context.stroke();
				context.closePath();
			});

			dc = [];
			// 顶层
			for (let j = 0; j < 300; j += speed) {
				let trans = 1 + Math.random() * 20;
				let size = Math.random() * 2;
				let xins = new xin(trans, size, j, ws);
				dc.push(xins);
			}

			dc.forEach(v => {
				context.beginPath();
				context.arc(v.x, v.y, v.rs, 0, Math.PI * 2);
				context.fill();
				context.stroke();
				context.closePath();
			});

		}, 100);
	}
</script>
<!--音乐代码-->
<audio autoplay="autoplay" loop="loop" preload="auto" src="https://link.hhtjim.com/163/1860578400.mp3"></audio>

</body>

</html>

代码分析

在这个代码中,我们定义了多个数组来存储小圆点的位置、大小和颜色等信息。然后,使用setInterval()函数周期性地更新这些小圆点的位置,从而实现了跳动的动画效果。同时,我们还通过调整一些参数来控制爱心的大小、速度和颜色等属性,让你可以根据自己的喜好来定制这个跳动的爱心。小编偷偷告诉你,在代码的第33行可以留下你想写的字哦~

当然,这个跳动的爱心代码并不仅仅是一个简单的视觉效果展示,它还可以被用作一种情感表达的方式。无论是向你的爱人表达爱意,还是向你的访客传递温暖,这个代码都能起到很好的作用,它能够让你的网页变得更加温馨和浪漫,让你的访客在浏览的同时也能感受到你的用心和关怀。

最后,值得一提的是,这个跳动的爱心代码不仅仅适用于个人博客或网站,它还可以被用于各种商业场合,如电商平台的促销页面、企业官网的欢迎页面等。运用这个代码,你可以为你的网页增添一份独特的魅力,吸引更多的访客并提升他们的留存率。

总之,李峋同款跳动的爱心代码是一个既实用又有趣的HTML代码,它不仅能够为你的网页增添一份浪漫的气息,还能够提升用户体验和吸引更多的访客。如果你也想让你的网页变得更加有趣和温馨,不妨尝试一下这个跳动的爱心代码吧!

系列推荐

序号目录直达链接
1HTML实现3D相册HTML实现3D相册-CSDN博客
2HTML元素周期表HTML元素周期表-CSDN博客
3HTML黑客帝国字母雨HTML黑客帝国字母雨_字母雨html-CSDN博客
4HTML五彩缤纷的爱心HTML五彩缤纷的爱心-CSDN博客
5HTML飘落的花瓣HTML飘落的花瓣-CSDN博客
6HTML哆啦A梦HTML哆啦A梦_html哆啦a梦代码-CSDN博客
7HTML爱情树HTML爱情树-CSDN博客
8HTML新春烟花盛宴HTML新春烟花盛宴-CSDN博客
9HTML想见你HTML想见你-CSDN博客
10HTML蓝色爱心HTML蓝色爱心-CSDN博客
11HTML跳动的爱心HTML跳动的爱心-CSDN博客
12HTML橙色爱心HTML橙色爱心-CSDN博客
13HTML大雪纷飞HTML大雪纷飞-CSDN博客
14HTML跨年烟花HTML跨年烟花-CSDN博客
15HTML跳动的爱心HTML跳动的爱心-CSDN博客
16HTML动态爱心HTML动态爱心-CSDN博客
17HTML浪漫星空HTML星空特效-CSDN博客
18HTML跳动的双爱心https://want595.blog.csdn.net/article/details/139799806
19
20
21
22
23
24
25
26
27

最后想说

我是一只有趣的兔子,感谢你的喜欢!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/722983.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

Linux系统编程——进程信号

目录 一&#xff0c;信号预备 1.1 生活中的信号 1.2 技术应用中的信号 1.3 signal函数捕捉信号 1.3 信号的发送与记录 1.4 信号的常见处理方式 二&#xff0c;信号的产生 2.1 核心转储 2.1.1 环境配置 2.1.2 利用core文件进行调试 2.1.3 core dump标志 2.2 通过系统…

【C语言】解决C语言报错:Null Pointer Dereference

文章目录 简介什么是Null Pointer DereferenceNull Pointer Dereference的常见原因如何检测和调试Null Pointer Dereference解决Null Pointer Dereference的最佳实践详细实例解析示例1&#xff1a;未初始化的指针示例2&#xff1a;释放内存后未将指针置为NULL示例3&#xff1a;…

STM32HAL库--NVIC和EXTI

1. 外部中断实验 1.1 NVIC和EXTI简介 1.1.1 NVIC简介 NVIC 即嵌套向量中断控制器&#xff0c;全称 Nested vectored interrupt controller。是ARM Cortex-M处理器中用于管理中断的重要组件。负责处理中断请求&#xff0c;分配优先级&#xff0c;并协调中断的触发和响应。 它是…

【会议征稿,IEEE出版】第四届电气工程与机电一体化技术国际学术会议(ICEEMT 2024,7月5-7)

第四届电气工程与机电一体化技术国际学术会议&#xff08;ICEEMT 2024&#xff09;定于2024年7月5-7日在浙江省杭州市隆重举行 。会议主要围绕“电气工程”、“机电一体化” 等研究领域展开讨论&#xff0c;旨在为电气工程、机电一体化等领域的专家学者、工程技术人员、技术研发…

STM32项目分享:智慧农业(机智云)系统

目录 一、前言 二、项目简介 1.功能详解 2.主要器件 三、原理图设计 四、PCB硬件设计 1.PCB图 2.PCB板打样焊接图 五、程序设计 六、实验效果 七、资料内容 项目分享 一、前言 项目成品图片&#xff1a; 哔哩哔哩视频链接&#xff1a; https://www.bilibili.c…

如何灵活运用keil工具进行问题分析(2)— 定位FreeRTOS的栈溢出导致hardfault问题

前言 &#xff08;1&#xff09;如果有嵌入式企业需要招聘湖南区域日常实习生&#xff0c;任何区域的暑假Linux驱动实习岗位&#xff0c;可C站直接私聊&#xff0c;或者邮件&#xff1a;zhangyixu02gmail.com&#xff0c;此消息至2025年1月1日前均有效 &#xff08;2&#xff0…

【会议征稿,JPCS出版】第四届测量控制与仪器仪表国际学术会议(MCAI 2024,7月19-21)

随着各行各业向智能化、自动化、信息化方向发展&#xff0c;对于精密测量与控制的需求日益增加。同时该专业人才在科学研究、制造业、互联网等领域就业前景也非常广阔。测控技术与仪器是现代工程与科技的重要领域之一&#xff0c;为各行各业提供精准、可靠的测量、控制和检测手…

LuckySheet导入报错file.match is not a function解决方法

最近在研究有什么类Excel的表格库。目前看到的话就是luckysheet和univer。 univer是luckysheet的升级版&#xff0c;问题是开源版没有提供导入导出功能。 在尝试luckysheet的导入功能的时候&#xff0c;会发现官方demo是没有报错的。而在自己的项目里就会有报错 导入呢是官方提…

jsp运行提示_jsp.java某行存在错误问题的解决

jsp运行提示XXX_jsp.java某行存在错误问题的解决 在编译运行jsp文件时&#xff0c;出现类似如下提示&#xff1a; 49行发生错误&#xff0c;要注意&#xff1a; 这里所指的49行并非jsp文件的第49行&#xff0c;而是编译后的jsp.java文件的第49行。 因此&#xff1a;解决问题…

FreeRTOS,使用SDIO外设会进入Hard FaultHandler

解决方法&#xff1a; 1.读写函数中&#xff0c;要使能所有中断。 2.读写缓冲数组为全局变量 3.任务堆栈开辟的大点

process is not defined

最近在开发项目中莫名遇到这个问题&#xff0c;网上查阅很多资料&#xff0c;上面的解决办法都不管用。最后在node_modules中找到path-browserify模块&#xff0c;修改index.js文件&#xff1a; 将process.cwd()注释&#xff0c;改为cwd __dirname,然后重启项目就好了。

教育与学习助手:Kompas AI革新学习体验

一、引言 在个性化学习需求日益增长的今天&#xff0c;教育领域正经历着一场技术革命。Kompas AI&#xff0c;作为一款先进的人工智能助手&#xff0c;正以其独特的功能和应用&#xff0c;为学习者提供个性化的学习支持&#xff0c;满足不同背景和需求的学生。 二、功能介绍 Ko…

kotlin区间

1、创建 fun main() {// 全闭区间val intRange 1..3 // int 区间val charRange a..c // 字符区间// 打印println(intRange.joinToString()) // 1,2,3println(charRange.joinToString()) // a,b,c// 左闭右开区间val intRangeExclusive 1 until 3// 倒叙全闭区间val intDown…

网络层 IP协议【计算机网络】【协议格式 || 分片 || 网段划分 || 子网掩码】

博客主页&#xff1a;花果山~程序猿-CSDN博客 文章分栏&#xff1a;Linux_花果山~程序猿的博客-CSDN博客 关注我一起学习&#xff0c;一起进步&#xff0c;一起探索编程的无限可能吧&#xff01;让我们一起努力&#xff0c;一起成长&#xff01; 目录 一&#xff0c;前提 二&…

【NOI-题解】1431. 迷宫的第一条出路

文章目录 一、前言二、问题问题&#xff1a;1431. 迷宫的第一条出路 三、感谢 一、前言 二、问题 问题&#xff1a;1431. 迷宫的第一条出路 类型&#xff1a;深度搜索、回溯、路径打印 题目描述&#xff1a; 已知一 NN 的迷宫&#xff0c;允许往上、下、左、右四个方向行走…

路由框架 ARouter 原理及源码解析

文章目录 前言一、ARouter 简介二、ARouter 使用1.添加依赖和配置2.添加注解3.初始化SDK4.发起路由操作 三、ARouter 成员1. PostCard 明信片2. Interceptor 拦截器3. Warehouse 路由仓库4. ARouter 注解处理 四、ARouter 原理五、ARouter 源码分析1. ARouter 初始化1.1 ARoute…

类的继承性(Java)

本篇学习面向对象语言的第二特性——继承性。 1 .为什么需要继承 我们来举个例子&#xff1a;我们知道动物有很多种&#xff0c;是一个比较大的概念。在动物的种类中&#xff0c;我们熟悉的有猫(Cat)、狗(Dog)等动物&#xff0c;它们都有动物的一般特征&#xff08;比如能够吃…

leetcode498 对角线遍历

题目 给你一个大小为 m x n 的矩阵 mat &#xff0c;请以对角线遍历的顺序&#xff0c;用一个数组返回这个矩阵中的所有元素。 示例 输入&#xff1a;mat [[1,2,3],[4,5,6],[7,8,9]] 输出&#xff1a;[1,2,4,7,5,3,6,8,9] 解析 本题目主要考察的就是模拟法&#xff0c;首…

【动态规划】斐波那契数列模型 {动态规划的解题思路;动态规划的优化方案;动态规划的基础题型}

一、经验总结 动态规划题型的解题思路&#xff1a; 状态表示&#xff1a;dp[i]的含义是什么。通过解题经验和题目要求得到&#xff0c;一般有以下两个方向&#xff1a; 以i位置为起点以i位置为终点 状态转移方程&#xff1a;dp[i]怎么求。根据距离i位置最近的一步划分问题&am…

公司面试题总结(六)

31.说一说 webpack 的构建流程是什么&#xff1f; ⚫ 初始化流程&#xff1a; ◼ 从配置文件和 Shell 语句中读取与合并参数 ◼ 初始化需要使用的插件和配置插件等执行环境所需要的参数 ⚫ 编译构建流程&#xff1a; ◼ 从 Entry 发出&#xff0c;针对每个 Module 串行…