wordpress原始分頁(yè)共seo關(guān)鍵詞優(yōu)化費(fèi)用
上述HTML文檔是一個(gè)使用Three.js庫(kù)創(chuàng)建的簡(jiǎn)單WebGL應(yīng)用程序,主要用于展示具有不同透明度和縮放比例的圓環(huán)列。以下是代碼的詳細(xì)解釋:
- HTML結(jié)構(gòu):
- 文檔類(lèi)型聲明為HTML5。
<html>
標(biāo)簽設(shè)置了語(yǔ)言屬性為英語(yǔ)(lang="en"
)。<head>
部分包含了文檔的標(biāo)題、字符集設(shè)置和視口設(shè)置。視口設(shè)置確保頁(yè)面在移動(dòng)設(shè)備上以適當(dāng)?shù)谋壤@示,不允許用戶(hù)縮放。<style>
標(biāo)簽內(nèi)定義了一些基本的CSS樣式,主要是去除body
的默認(rèn)邊距,并設(shè)置canvas
元素為塊級(jí)顯示。
- JavaScript部分(使用ES6模塊):
- 通過(guò)
import
語(yǔ)句導(dǎo)入了Three.js庫(kù)及其相關(guān)模塊,包括OrbitControls
用于相機(jī)交互。 - 初始化Three.js的核心組件:
- 創(chuàng)建一個(gè)場(chǎng)景(
Scene
)。 - 創(chuàng)建一個(gè)透視相機(jī)(
PerspectiveCamera
),其視場(chǎng)角為75度,寬高比根據(jù)窗口大小動(dòng)態(tài)計(jì)算,近剪裁面為0.1,遠(yuǎn)剪裁面為1000。 - 創(chuàng)建一個(gè)WebGL渲染器(
WebGLRenderer
),并設(shè)置其大小與窗口大小相匹配,然后將渲染器的DOM元素添加到body
中。
- 創(chuàng)建一個(gè)場(chǎng)景(
- 創(chuàng)建一個(gè)包含四個(gè)圓環(huán)的數(shù)組
meshes
:- 每個(gè)圓環(huán)使用
RingGeometry
定義,具有不同的透明度和縮放比例。 - 圓環(huán)的材質(zhì)使用
MeshBasicMaterial
,并設(shè)置顏色、透明度、是否透明以及雙面渲染。 - 將每個(gè)創(chuàng)建好的圓環(huán)網(wǎng)格對(duì)象(
Mesh
)添加到meshes
數(shù)組中。
- 每個(gè)圓環(huán)使用
- 遍歷
meshes
數(shù)組,并將每個(gè)圓環(huán)添加到場(chǎng)景中。 - 添加光照:
- 一個(gè)環(huán)境光(
AmbientLight
)用于基礎(chǔ)照明。 - 一個(gè)聚光燈(
SpotLight
)用于強(qiáng)調(diào)照明效果,位置設(shè)置為(10, 10, 10)。
- 一個(gè)環(huán)境光(
- 設(shè)置相機(jī)位置,
z
軸為50,以便觀察場(chǎng)景。 - 添加
OrbitControls
以允許用戶(hù)通過(guò)鼠標(biāo)和鍵盤(pán)交互地移動(dòng)相機(jī)。 - 定義一個(gè)
render
函數(shù),用于動(dòng)態(tài)改變圓環(huán)的透明度和縮放比例。這里有一個(gè)邏輯判斷,如果透明度降至0以下,則重置為1,并縮放比例重置為(1, 1, 1);否則,逐漸減小透明度和增大縮放比例。 - 創(chuàng)建一個(gè)動(dòng)畫(huà)循環(huán)
animate
,使用requestAnimationFrame
確保動(dòng)畫(huà)平滑,每次循環(huán)調(diào)用render
函數(shù)、更新OrbitControls
并渲染場(chǎng)景。 - 添加一個(gè)事件監(jiān)聽(tīng)器,用于處理窗口大小變化時(shí)更新相機(jī)的寬高比和渲染器的大小。
- 最后,啟動(dòng)動(dòng)畫(huà)循環(huán)。
- 通過(guò)
- 功能概述:
- 頁(yè)面加載時(shí),用戶(hù)將看到一個(gè)包含四個(gè)圓環(huán)的場(chǎng)景,每個(gè)圓環(huán)具有不同的透明度和動(dòng)態(tài)變化的縮放比例。
- 用戶(hù)可以通過(guò)鼠標(biāo)和鍵盤(pán)使用
OrbitControls
來(lái)旋轉(zhuǎn)、平移和縮放相機(jī),以不同角度觀察場(chǎng)景。 - 隨著動(dòng)畫(huà)的進(jìn)行,圓環(huán)的透明度和縮放比例將不斷變化,創(chuàng)造一種動(dòng)態(tài)效果。
總之,這段代碼展示了一個(gè)基本的Three.js應(yīng)用,通過(guò)動(dòng)態(tài)改變對(duì)象的屬性和使用簡(jiǎn)單的光照來(lái)創(chuàng)建一個(gè)有趣的視覺(jué)效果。
<!DOCTYPE html>
<html lang="en"><head><title>three.js webgl - particles - columns</title><meta charset="utf-8"><meta name="viewport" content="width=device-width, user-scalable=no, minimum-scale=1.0, maximum-scale=1.0"><style>body {margin: 0;}canvas {display: block;}</style>
</head><body><script type="module">import * as THREE from 'three';import { Scene, PerspectiveCamera, WebGLRenderer, AmbientLight, Color, SpotLight } from "three";import { OrbitControls } from 'three/addons/controls/OrbitControls.js';// 初始化場(chǎng)景、相機(jī)和渲染器 const scene = new Scene();const camera = new PerspectiveCamera(75, window.innerWidth / window.innerHeight, 0.1, 1000);const renderer = new WebGLRenderer();renderer.setSize(window.innerWidth, window.innerHeight);document.body.appendChild(renderer.domElement);const meshes = [];for (let i = 0; i < 4; i++) {const geometry = new THREE.RingGeometry(0.9, 1, 64);const opacity = 1 - i / 4; // 計(jì)算透明度 const scale = (16 * i) / 4 + 1; // 計(jì)算縮放比例 const material = new THREE.MeshBasicMaterial({color: 0x3184ae,transparent: true,opacity: opacity, // 使用計(jì)算的透明度 side: THREE.DoubleSide});const mesh = new THREE.Mesh(geometry, material);mesh.scale.set(scale, scale, 1);meshes.push(mesh);}// 遍歷 meshes 數(shù)組,并將每個(gè) mesh 添加到場(chǎng)景中 meshes.forEach(mesh => {scene.add(mesh);});//// 添加環(huán)境光和聚光燈 const ambientLight = new AmbientLight(0xffffff, 0.5);scene.add(ambientLight);const spotLight = new SpotLight(0xffffff, 1);spotLight.position.set(10, 10, 10);scene.add(spotLight);/// 設(shè)置相機(jī)位置 camera.position.z = 50;// 添加OrbitControls以便交互 const controls = new OrbitControls(camera, renderer.domElement);const render = () => {meshes.forEach((mesh, index) => {const meterial = mesh.material;if (meterial.opacity <= 0) {meterial.opacity = 1;mesh.scale.set(1, 1, 1);} else { meterial.opacity -= 0.002; mesh.scale.set(mesh.scale.x + 0.038, mesh.scale.y + 0.038, 1); }});};// 創(chuàng)建動(dòng)畫(huà)循環(huán) const animate = function () {requestAnimationFrame(animate);render();controls.update(); // 更新OrbitControls renderer.render(scene, camera);};// 處理窗口大小調(diào)整 window.addEventListener('resize', () => {camera.aspect = window.innerWidth / window.innerHeight;camera.updateProjectionMatrix();renderer.setSize(window.innerWidth, window.innerHeight);});// 開(kāi)始動(dòng)畫(huà)循環(huán) animate();</script>
</body></html>