window.innerHeight undefined

本文介绍了在不同浏览器版本中获取屏幕高度的兼容性解决方案。针对IE8及以上版本推荐使用window.innerHeight,对于IE8以下版本则建议采用document.body.clientHeight。为确保所有版本的IE都能正确获取到屏幕的高度信息,可以通过条件判断进行兼容处理。
ie8以上版本获取屏幕高度用window.innerHeight
ie8以下版本用document.body.clientHeight
兼容ie版本可以使用 var height=window.innerHeight||document.body.clientHeight;
<!DOCTYPE html> <html lang="zh-CN"> <head> <meta charset="UTF-8" /> <meta name="viewport" content="width=device-width, initial-scale=1.0" /> <title>3D 模型预览 - OBJ</title> <style> body { margin: 0; overflow: hidden; } canvas { display: block; } </style> <script type="importmap"> { "imports": { "three": "./node_modules/three/build/three.module.js", "OrbitControls": "./node_modules/three/examples/jsm/controls/OrbitControls.js", "OBJLoader": "./node_modules/three/examples/jsm/loaders/OBJLoader.js" } } </script> </head> <body> <script type="module"> import * as THREE from 'three'; import { OrbitControls } from 'OrbitControls'; import { OBJLoader } from 'OBJLoader'; // 创建场景 const scene = new THREE.Scene(); scene.background = new THREE.Color(0xeeeeee); // 相机 const camera = new THREE.PerspectiveCamera(75, window.innerWidth / window.innerHeight, 0.1, 1000); camera.position.set(0, 1.5, 5); // 渲染器 const renderer = new THREE.WebGLRenderer({ antialias: true }); renderer.setSize(window.innerWidth, window.innerHeight); document.body.appendChild(renderer.domElement); // 控制器 const controls = new OrbitControls(camera, renderer.domElement); controls.enableDamping = true; // 光源 const light = new THREE.HemisphereLight(0xffffff, 0x444444); light.position.set(0, 20, 0); scene.add(light); // 加载 OBJ 模型 const loader = new OBJLoader(); loader.load( './piyopiyo.obj', // 确保路径正确,和 HTML 文件同目录 (obj) => { obj.position.set(0, 0, 0); obj.scale.set(1, 1, 1); scene.add(obj); console.log('OBJ模型加载成功'); }, undefined, (error) => { console.error('OBJ模型加载失败:', error); } ); // 窗口大小改变 window.addEventListener('resize', () => { camera.aspect = window.innerWidth / window.innerHeight; camera.updateProjectionMatrix(); renderer.setSize(window.innerWidth, window.innerHeight); }); // 动画循环 function animate() { requestAnimationFrame(animate); controls.update(); renderer.render(scene, camera); } animate(); </script> </body> </html> 这个代码有禁用鼠标右键吗
06-19
import React, { useEffect, useRef } from 'react'; import * as THREE from 'three'; // @ts-ignore import { OrbitControls } from 'three/examples/jsm/controls/OrbitControls'; const VRRoom: React.FC = () => { const mountRef = useRef<HTMLDivElement>(null); useEffect(() => { // 场景 const scene = new THREE.Scene(); // 相机 const camera = new THREE.PerspectiveCamera( 75, window.innerWidth / window.innerHeight, 0.3, 1000 ); camera.position.set(0, 0, 0.1); // 渲染器 const renderer = new THREE.WebGLRenderer({ antialias: true }); renderer.setSize(window.innerWidth, window.innerHeight); // 控制器 const controls = new OrbitControls(camera, renderer.domElement); controls.enableZoom = false; controls.enablePan = false; controls.rotateSpeed = 0.5; // 球体几何体 const geometry = new THREE.SphereGeometry(500, 60, 40); geometry.scale(-1, 1, 1); // 反转球体,使贴图在内壁 // 贴图 const texture = new THREE.TextureLoader().load('/vr.jpg'); const material = new THREE.MeshBasicMaterial({ map: texture }); const mesh = new THREE.Mesh(geometry, material); scene.add(mesh); // 渲染函数 const animate = () => { requestAnimationFrame(animate); controls.update(); renderer.render(scene, camera); }; // 挂载 if (mountRef.current) { mountRef.current.appendChild(renderer.domElement); } animate(); // 响应式 const handleResize = () => { camera.aspect = window.innerWidth / window.innerHeight; camera.updateProjectionMatrix(); renderer.setSize(window.innerWidth, window.innerHeight); }; window.addEventListener('resize', handleResize); // 清理 return () => { window.removeEventListener('resize', handleResize); if (mountRef.current) { mountRef.current.removeChild(renderer.domElement); } renderer.dispose(); geometry.dispose(); material.dispose(); texture.dispose(); }; }, []); return <div ref={mountRef} style={{ width: '100vw', height: '100vh', overflow: 'hidden' }} />; }; export default VRRoom;帮我找一下为什么效果是全黑
06-24
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值