在
threeJs
进行3D
项目展示的过程中,会遇到浏览器尺寸变化,以及想要全屏展示的场景。如果,我们想在屏幕尺寸变化时,让展示铺满可视区。如果,我们想通过双击实现展示的全屏,再次双击退出全屏,可以参照以下代码。
import * as THREE from 'three';
import {
OrbitControls
} from 'three/examples/jsm/controls/OrbitControls.js'
// 获取画布
const canvas = document.querySelector('canvas.webgl')
// 创建场景
const scene = new THREE.Scene()
// 创建物体并添加至场景中
const geometry = new THREE.BoxGeometry(1, 1, 1)
const material = new THREE.MeshBasicMaterial({
color: 'orange',
})
const mesh = new THREE.Mesh(geometry, material)
scene.add(mesh)
// 定义尺寸
const sizes = {
width: window.innerWidth,
height: window.innerHeight
}
// 监听尺寸变化:更新尺寸,修改屏幕宽高比,设置尺寸,并进行像素比的修改
window.addEventListener('resize', () => {
// 更新尺寸
sizes.width = window.innerWidth
sizes.height = window.innerHeight
// 设置宽高比,并且进行更新
camera.aspect = sizes.width / sizes.height
camera.updateProjectionMatrix()
// 渲染屏幕设置尺寸
renderer.setSize(sizes.width, sizes.height)
// 设置屏幕像素比
renderer.setPixelRatio(window.devicePixelRatio)
})
// 监听双击:进行全屏和退出全屏操作
window.addEventListener('dblclick', () => {
const fullscreenElement = document.fullscreenElement || document.webkitFullscreenElement
if (!fullscreenElement) {
if (canvas.requestFullscreen) {
canvas.requestFullscreen()
} else if (canvas.webkitRequestFullscreen) {
canvas.webkitRequestFullscreen()
}
} else {
if (document.exitFullscreen) {
document.exitFullscreen()
} else if (document.webkitExitFullscreen) {
document.webkitExitFullscreen()
}
}
})
// 相机:正交相机
const camera = new THREE.PerspectiveCamera(75, sizes.width / sizes.height, 1, 1000)
camera.position.z = 3
scene.add(camera)
// 控制器
const controls = new OrbitControls(camera, canvas)
controls.enableDamping = true
// 渲染
const renderer = new THREE.WebGLRenderer({
canvas: canvas,
antialias: true // 消除物体锯齿
})
renderer.setSize(sizes.width, sizes.height)
renderer.setPixelRatio(Math.min(window.devicePixelRatio, 2))
// 动画
const update = () => {
// 控制器更新
controls.update()
// 渲染更新
renderer.render(scene, camera)
// 下一个屏幕帧时继续执行
window.requestAnimationFrame(update)
}
update()