要使用React使一个普通的Three.js画布跨越整个网页的视图高度和宽度,可以按照以下步骤进行操作:
componentDidMount
生命周期方法中,创建一个Three.js场景、相机和渲染器,并将渲染器的输出添加到组件的DOM元素中。height: 100vh
和width: 100vw
来实现。componentDidUpdate
生命周期方法中,更新渲染器的大小以适应组件容器的变化。可以使用renderer.setSize(width, height)
来设置渲染器的大小。下面是一个示例代码:
import React, { useEffect, useRef } from 'react';
import * as THREE from 'three';
const ThreeCanvas = () => {
const containerRef = useRef(null);
useEffect(() => {
// 创建场景
const scene = new THREE.Scene();
// 创建相机
const camera = new THREE.PerspectiveCamera(75, window.innerWidth / window.innerHeight, 0.1, 1000);
camera.position.z = 5;
// 创建渲染器
const renderer = new THREE.WebGLRenderer({ antialias: true });
renderer.setSize(window.innerWidth, window.innerHeight);
// 将渲染器的输出添加到组件的DOM元素中
containerRef.current.appendChild(renderer.domElement);
// 创建几何体和材质
const geometry = new THREE.BoxGeometry();
const material = new THREE.MeshBasicMaterial({ color: 0x00ff00 });
const cube = new THREE.Mesh(geometry, material);
scene.add(cube);
// 动画循环
const animate = () => {
requestAnimationFrame(animate);
// 旋转几何体
cube.rotation.x += 0.01;
cube.rotation.y += 0.01;
// 渲染场景
renderer.render(scene, camera);
};
animate();
// 更新渲染器的大小以适应组件容器的变化
const handleResize = () => {
const width = window.innerWidth;
const height = window.innerHeight;
camera.aspect = width / height;
camera.updateProjectionMatrix();
renderer.setSize(width, height);
};
window.addEventListener('resize', handleResize);
return () => {
window.removeEventListener('resize', handleResize);
};
}, []);
return <div ref={containerRef} style={{ height: '100vh', width: '100vw' }} />;
};
export default ThreeCanvas;
这样,使用React和Three.js的组合,你可以创建一个跨越整个网页视图高度和宽度的画布。
领取专属 10元无门槛券
手把手带您无忧上云