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 | | |

写在后面

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

相关推荐
kyriewen12 分钟前
折腾了半年 AI 编程工作流,最后发现效率瓶颈是桌上那块屏幕
前端·javascript·ai编程
蜗牛前端39 分钟前
codex 全流程开发上线的高颜值礼簿小程序
前端·微信小程序
大龄秃头程序员1 小时前
我在图文流 App 里落地双层缓存、弱网降级与 OOM 治理
前端
老王以为1 小时前
React Renderer 分离的多平台架构
前端·react native·react.js
hunterandroid1 小时前
Kotlin Coroutines 与 Flow:让异步任务更清晰
前端
Bigger2 小时前
从零搭建 AI 代码审查服务:一份前端也能看懂的 Python 学习笔记
前端·ci/cd·ai编程
lichenyang4532 小时前
JSAPI、NAPI、Biz、Imp:ASCF Demo 如何真正调用系统能力和 C++ 能力
前端
lichenyang4533 小时前
IPC、JSVM、UIThread、libuv:ASCF 架构图里最容易混的几个词
前端
用户059540174463 小时前
Redis记忆存储故障恢复测试踩坑实录:手动测试让我漏掉了2个一致性Bug
前端·css
用户2136610035723 小时前
Vue2脚手架工程化与Axios集成
前端·vue.js