HTML想见你

目录

写在前面

HTML简介

完整代码

代码分析

运行结果

系列推荐

写在后面


写在前面

因为想见你,

莫比乌斯环才会闭合,

多维时空的一次次穿越才会发生,

而相遇的意义,也在于此,

在于彼此内心深处无尽的思念之情。

这一次,

就让小编用html语言绘制一场雪中的相遇,

送给屏幕前的黄雨萱和李子维们。

HTML简介

HTML(HyperText Markup Language)是一种用于创建网页结构和内容的标记语言。它被广泛用于构建网页,并与CSS(层叠样式表)和JavaScript一起工作,形成了现代网页的基础。以下是HTML的一些基本概念和特点:

  1. 标记语言:HTML使用标签(tag)来标记文本,以指示浏览器如何显示内容。标签通常由尖括号包围,并且可以包含属性和内容。

  2. 元素(Element):一个完整的HTML标签及其包括的内容组成一个元素。例如,<p>元素用于定义段落,<h1>元素用于定义一级标题等。

  3. 标签(Tag):HTML标签用于标记文本内容。它们有不同的作用和语义,如标题、段落、链接等。

  4. 属性(Attribute):HTML标签可以包含属性,用于提供有关元素的额外信息。属性包括名称和值,例如<a href="https://www.example.com">中的href属性用于指定链接的目标URL。

  5. 结构化组织:HTML通过使用不同的标签和元素来组织网页的结构。常用的结构标签包括<header>、<nav>、<main>、<section>、<footer>等。

  6. 超链接:HTML通过<a>标签创建超链接,用于在不同的页面之间建立链接关系。

  7. 图像和媒体:HTML通过<img>标签嵌入图像,通过<video>和<audio>标签嵌入视频和音频内容。

  8. 表格:HTML提供了<table>、<tr>、<td>等标签来创建表格,用于展示结构化数据。

  9. 表单:HTML通过<form>、<input>等标签实现用户输入和数据提交功能。

  10. 样式和布局:HTML本身是用于定义内容结构的,而样式和布局则通过CSS来实现。CSS可以用于控制网页的外观和排版样式。HTML的语法相对简单,易于上手。您可以使用文本编辑器编写HTML代码,并在浏览器中查看和运行结果。随着对HTML的熟练掌握,您可以创建出丰富、交互性强的网页。

完整代码

html 复制代码
<!DOCTYPE html>

<head>
	<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
	<title>想见你</title>

	<style type="text/css">
		body {
			background-color: #000044;
			background: url(images/bg.jpg);
			margin: 0px;
			overflow: hidden;
		}
	</style>

</head>

<body onLoad="init()">

	<script type="text/javascript" src="js/ThreeCanvas.js"></script>
	<script type="text/javascript" src="js/Snow.js"></script>
	<script type="text/javascript">
		var SCREEN_WIDTH = window.innerWidth;
		var SCREEN_HEIGHT = window.innerHeight;

		var container;

		var particle;

		var camera;
		var scene;
		var renderer;

		var mouseX = 0;
		var mouseY = 0;

		var windowHalfX = window.innerWidth / 2;
		var windowHalfY = window.innerHeight / 2;

		var particles = [];
		var particleImage = new Image();
		particleImage.src = 'images/ParticleSmoke.png';



		function init() {

			container = document.createElement('div');
			document.body.appendChild(container);

			camera = new THREE.PerspectiveCamera(75, SCREEN_WIDTH / SCREEN_HEIGHT, 1, 10000);
			camera.position.z = 1000;

			scene = new THREE.Scene();
			scene.add(camera);

			renderer = new THREE.CanvasRenderer();
			renderer.setSize(SCREEN_WIDTH, SCREEN_HEIGHT);
			var material = new THREE.ParticleBasicMaterial({ map: new THREE.Texture(particleImage) });

			for (var i = 0; i < 500; i++) {

				particle = new Particle3D(material);
				particle.position.x = Math.random() * 2000 - 1000;
				particle.position.y = Math.random() * 2000 - 1000;
				particle.position.z = Math.random() * 2000 - 1000;
				particle.scale.x = particle.scale.y = 1;
				scene.add(particle);

				particles.push(particle);
			}

			container.appendChild(renderer.domElement);


			document.addEventListener('mousemove', onDocumentMouseMove, false);
			document.addEventListener('touchstart', onDocumentTouchStart, false);
			document.addEventListener('touchmove', onDocumentTouchMove, false);

			setInterval(loop, 1000 / 60);

		}

		function onDocumentMouseMove(event) {

			mouseX = event.clientX - windowHalfX;
			mouseY = event.clientY - windowHalfY;
		}

		function onDocumentTouchStart(event) {

			if (event.touches.length == 1) {

				event.preventDefault();

				mouseX = event.touches[0].pageX - windowHalfX;
				mouseY = event.touches[0].pageY - windowHalfY;
			}
		}

		function onDocumentTouchMove(event) {

			if (event.touches.length == 1) {

				event.preventDefault();

				mouseX = event.touches[0].pageX - windowHalfX;
				mouseY = event.touches[0].pageY - windowHalfY;
			}
		}

		function loop() {

			for (var i = 0; i < particles.length; i++) {

				var particle = particles[i];
				particle.updatePhysics();

				with (particle.position) {
					if (y < -1000) y += 2000;
					if (x > 1000) x -= 2000;
					else if (x < -1000) x += 2000;
					if (z > 1000) z -= 2000;
					else if (z < -1000) z += 2000;
				}
			}

			camera.position.x += (mouseX - camera.position.x) * 0.05;
			camera.position.y += (- mouseY - camera.position.y) * 0.05;
			camera.lookAt(scene.position);

			renderer.render(scene, camera);

		}
	</script>
</body>

</html>

代码分析

该网页程序基于Three.js库构建了一个动态3D粒子动画场景,具有以下主要特点和功能:

  1. 页面加载完成后(`onLoad="init()"`),通过调用`init`函数启动三维场景初始化过程。首先,创建一个DOM元素作为Three.js渲染容器,并将其添加到页面中。然后定义了相机参数,采用透视投影以增强立体感,相机放置在适当距离的观察点上。

  2. 在样式表部分设置了背景颜色与背景图片,为用户提供沉浸式视觉体验。同时,通过JavaScript动态获取浏览器窗口尺寸来适配不同设备屏幕。

  3. 初始化Three.js的核心组件:场景、相机以及Canvas渲染器。接着,加载粒子纹理图像资源,用于粒子效果的外观显示。

  4. `init`函数进一步循环生成500个粒子对象,每个粒子的位置随机分布在三维空间内,并赋予其基础属性如初始位置和缩放比例。这些粒子均使用预加载的粒子贴图,并被加入到全局场景中。

  5. 为了实现用户交互,程序注册了鼠标移动事件和触摸事件监听器,更新鼠标坐标变量,以便在后续帧动画中控制相机视角。

  6. 主循环函数`loop`每秒执行60次,确保平滑的动画效果。在这个循环中,每个粒子都会调用自身的物理更新方法,模拟粒子在空间中的飘动行为。同时,通过边界条件保证粒子在一定范围内循环运动,防止超出视窗范围消失。

  7. 根据实时更新的鼠标坐标,程序会平缓地调整相机位置并使其始终面向场景中心,实现了通过鼠标或触屏拖拽进行视角变换的功能。

  8. 最后,每一帧循环结束时,程序通过CanvasRenderer将当前场景渲染到网页上,呈现出动感十足且可交互的3D粒子特效。

综上所述,这段代码借助Three.js强大的WebGL图形处理能力,成功创建了一个包含大量动态粒子、支持用户交互的三维可视化应用场景。

运行结果

系列推荐

|----|-------------|------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|
| 序号 | 目录 | 直达链接 |
| 1 | HTML实现3D相册 | https://want595.blog.csdn.net/article/details/138652869 |
| 2 | HTML元素周期表 | https://want595.blog.csdn.net/article/details/138653653 |
| 3 | HTML黑客帝国字母雨 | https://want595.blog.csdn.net/article/details/138654054 |
| 4 | HTML五彩缤纷的爱心 | https://want595.blog.csdn.net/article/details/138654581 |
| 5 | HTML飘落的花瓣 | https://want595.blog.csdn.net/article/details/138785324 |
| 6 | HTML哆啦A梦 | https://want595.blog.csdn.net/article/details/138834877 |
| 7 | HTML爱情树 | https://want595.blog.csdn.net/article/details/139009594 |
| 8 | HTML新春烟花盛宴 | https://want595.blog.csdn.net/article/details/139102775 |
| 9 | HTML想见你 | |
| 10 | | |
| 11 | | |
| 12 | | |
| 13 | | |
| 14 | | |
| 15 | | |
| 16 | | |
| 17 | | |
| 18 | | |
| 19 | | |
| 20 | | |
| 21 | | |
| 22 | | |
| 23 | | |
| 24 | | |
| 25 | | |
| 26 | | |
| 27 | | |

写在后面

喜欢本篇内容的小伙伴,可以给小编点个赞嘛!

相关推荐
miss30 分钟前
AI 改完不敢上线?OpenSpec 规约驱动开发实战
前端·代码规范·前端工程化
AiMan1 小时前
腾讯ima还是不可以导出左侧所有对话,只能单条导出,方法不对吗
前端
去伪存真1 小时前
并发量一高就装死?Agent 全链路“防猝死”手册
前端·agent
Moment1 小时前
AI 编程时代,聊聊我的 Mac mini 双屏桌面
前端·后端
AiMan1 小时前
先确认能不能一次把Microsofat Copilot所有内容打包一个文件导出
前端
总要学点什么1 小时前
第97篇:三维数据加载-城市建筑白模自定义着色器——让一条光带沿高度扫上去,快慢却由帧率说了算
前端·gis·webgl·cesium·着色器·空间分析·白模
上海懒图科技2 小时前
工厂厂区电子地图定位导航:厂区人车精准定位,安全合规双保障
前端·arcgis·vue
西安小哥2 小时前
端侧跑大模型,真正的门槛不在参数量:一次 596 秒到 10 秒的压缩路径复盘
前端·人工智能
陈随易3 小时前
Cloudflare 出钱,Vite 团队挑人,44 个维护者分 30 万美元
前端·后端·程序员
恋猫de小郭3 小时前
Flutter THLC 的 WebView 滚动终于从 70 FPS 提升到 120 FPS
android·前端·flutter