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

写在后面

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

相关推荐
zqx_734 分钟前
随记 前端框架React的初步认识
前端·react.js·前端框架
惜.己1 小时前
javaScript基础(8个案例+代码+效果图)
开发语言·前端·javascript·vscode·css3·html5
什么鬼昵称1 小时前
Pikachu-csrf-CSRF(get)
前端·csrf
长天一色2 小时前
【ECMAScript 从入门到进阶教程】第三部分:高级主题(高级函数与范式,元编程,正则表达式,性能优化)
服务器·开发语言·前端·javascript·性能优化·ecmascript
NiNg_1_2342 小时前
npm、yarn、pnpm之间的区别
前端·npm·node.js
秋殇与星河2 小时前
CSS总结
前端·css
BigYe程普2 小时前
我开发了一个出海全栈SaaS工具,还写了一套全栈开发教程
开发语言·前端·chrome·chatgpt·reactjs·个人开发
神之王楠2 小时前
如何通过js加载css和html
javascript·css·html
余生H3 小时前
前端的全栈混合之路Meteor篇:关于前后端分离及与各框架的对比
前端·javascript·node.js·全栈
程序员-珍3 小时前
使用openapi生成前端请求文件报错 ‘Token “Integer“ does not exist.‘
java·前端·spring boot·后端·restful·个人开发