全屏:画布全屏和body页面全屏;

// 导入 threejs
import * as THREE from "three";
import { OrbitControls } from "three/examples/jsm/controls/OrbitControls.js";
// 创建场景 scene
const scene = new THREE.Scene();
// console.log(scene,'scene');
// 创建相机 -- 观看物体的不同视角
const camera = new THREE.PerspectiveCamera(
45, // 视角
window.innerWidth / window.innerHeight, // 宽高比
0.1, // 近平面
1000 // 远平面
);
// const camera1 = new THREE.OrthographicCamera();
// console.log('透视投影相机',camera); // 和人的眼睛看的东西一样 近大远小
// console.log('正投影相机',camera1); // 创建渲染器
const renderer = new THREE.WebGLRenderer();
// console.log('渲染器',renderer);
// 置canvas画设布的尺寸 -- 设置threejs渲染区域的尺寸 像素 px
renderer.setSize(window.innerWidth,window.innerHeight);
// domElement 就是一个 canvas 标签 结果 -- 把 canvas 渲染到了页面上
document.body.appendChild(renderer.domElement); // 添加坐标轴
const axesHelper = new THREE.AxesHelper(5); // 参数为轴的长度
scene.add(axesHelper); // 创建一个集合体 -- 正方体
const gemetry = new THREE.BoxGeometry(1,1,1);
// 创建材质 material --- 网格基础材质
const material = new THREE.MeshBasicMaterial({
color: 0x9ac833, // # 使用 0x 替代 十六进制
});
const material1 = new THREE.MeshBasicMaterial({
color: 0xee502d, // # 使用 0x 替代 十六进制
}); // 创建网格模型 -- 就是 3D 物体了 -- 由几何体 gemetry 和 材质 material 构成
const mesh = new THREE.Mesh(gemetry,material);
const meshParent = new THREE.Mesh(gemetry,material1);
// console.log('网格',mesh); // 缩放 scale 设置立方体的放大效果 父元素放大子元素也会随着放大
// 子元素放大是按照父元素的位置放大的
// meshParent.scale.set(2,2,2);
mesh.scale.set(2,2,2);
// 创建了父元素 把子元素放到 父元素中 ps:position 位置是相对与父元素的位置来说的 即相对位置
meshParent.position.set(-3,0,0);
mesh.position.set(1,0,0); // 设置物体的位置 x y z y 轴就是垂直的 (-3,0,0) 才是原点 // 旋转 按照某个坐标轴旋转o3d -- 欧拉角 -- 指定了顺序和坐标轴
// 绕着x轴旋转 父元素的旋转会使子元素跟随旋转
console.log(Math.PI);
mesh.rotation.x = Math.PI / 4; // 180 / 4 = 45 度 // 把物体放到场景中间
// scene.add(mesh);
meshParent.add(mesh);
scene.add(meshParent); // 设置相机的位置 position
camera.position.set(10,10,10); // 远距离和近距离
// camera.position.y = 50; // 远距离和近距离
camera.lookAt(0,0,0);
// camera.lookAt(mesh.position);// 指向mesh对应的位置 // 引入相机控件 -- 轨道控制器
// console.log('OrbitControls',OrbitControls);
const controls = new OrbitControls(camera,renderer.domElement);
// controls.addEventListener('change', function () {
// renderer.render(scene, camera); //执行渲染操作
// });//监听鼠标、键盘事件 // 浏览器大小调整事件监听 -- 监听窗口的变化
window.addEventListener("resize", () => {
// console.log('test');
renderer.setSize(window.innerWidth,innerHeight); // 根据缩放的窗口重新设置画布的大小
// 垂直相机宽高比
camera.aspect = window.innerWidth / window.innerHeight;
// 更新相机投影矩阵
camera.updateProjectionMatrix();
}); // 全屏
var btn = document.createElement("button");
btn.innerHTML = "全屏";
btn.style.position = "absolute";
btn.style.top = "10px";
btn.style.left = "10px";
btn.style.zIndex = 9919;
btn.onclick = function() {
// renderer.domElement.requestFullscreen(); // 画布全屏
// body 全屏
document.body.requestFullscreen();
};
document.body.appendChild(btn); // 退出全屏
var btn = document.createElement("button");
btn.innerHTML = "退出全屏";
btn.style.position = "absolute";
btn.style.top = "10px";
btn.style.left = "100px";
btn.style.zIndex = 9919;
btn.onclick = function() {
document.exitFullscreen();
};
document.body.appendChild(btn); // 添加带阻尼的惯性
controls.enableDamping = true; // 设置后会有滑动的效果
controls.dampingFactor = 0.2011; // 时间越小 滑动的时间越小 controls.autoRotate = false; // 自动旋转
// console.log(controls);
// controls.addEventListener('change', function () {
// // 浏览器控制台查看相机位置变化
// console.log('camera.position',camera.position);
// });
// renderer.render(scene,camera);
// controls.autoRotate = true; // 自动旋转
// controls.autoRotateSpeed = 10030; // 设置的转速
// controls.dampingFactor = true;
// 动态的渲染函数
function animate() {
controls.update(); // 如果使用了 autoRotate 属性等 需要在动画中执行 update 方法
requestAnimationFrame(animate); // 逐帧渲染
// 旋转
// mesh.rotation.x += 0.01;
// mesh.rotation.y += 0.01;
renderer.render(scene,camera);
}
animate()

threejs 浏览器窗口resize变化 自适应 html 全屏的更多相关文章

  1. 微信内置浏览器的JsAPI(WeixinJSBridge续)进入全屏

    微信内置浏览器的JsAPI(WeixinJSBridge续)进入全屏 之前有写过几篇关于微信内置浏览器(WebView)中特有的Javascript API(Javascript Interface) ...

  2. Android 图片浏览器 从原来位置放大至全屏显示

    android 图片浏览器 特点: 1.从网络加载图片,只需要传图片地址数组即可 2.点击图片,从原来位置放大至全屏 3.支持手势操作 4.完全自定义布局 项目源码请到GitHub下载:https:/ ...

  3. 用jQuery监听浏览器窗口的变化

    $(window).resize(function () { //当浏览器大小变化时 alert($(window).height()); //浏览器时下窗口可视区域高度 alert($(docume ...

  4. div高度随浏览器窗口高度变化;

    通过实际测试,按照网上的说法通过设置html,body{height: 100%:}, 然后让div以100%继承body的高度,这种做法是错误的,必须得上级有个设置固定的高度. 原生js代码(参照网 ...

  5. vue监听浏览器窗口的变化,随着窗口变化调整里面table的宽高

    1.在data中设置: tableHeight:"500", screenHeight:window.innerHeight, 2.在mounted中设置: mounted() { ...

  6. ubuntu终端窗口最大化(不是全屏)

    窗口最大化:ctrl+win窗+↑ 窗口还原:ctrl+win窗+↓ 这快捷键让人无语.好好的gnome被改造成unity,快捷键也改掉了.win窗+↑/↓为啥不用呢? 还有就是terminal的ta ...

  7. js控制网页窗口一打开就自动全屏

    1.如果不需要开新窗口 在body区加入: <body   onLoad= "javascript:window.resizeTo(screen.availWidth,screen.a ...

  8. vue---监听浏览器窗口的宽度

    使用VUE开发后台项目,后台项目需要进行后台根据浏览器窗口进行变化,需要使用vue来监听浏览器的窗口变化. <template>     <div class="conte ...

  9. c# 调用浏览器打开网址并全屏

    关键性参数 Google Chrome浏览器 Process process = Process.Start("chrome.exe", " --kiosk " ...

  10. 兼容IE浏览器的js浏览器全屏代码

    众所周知,IE是个奇葩的浏览器,但是由于用户量很大,开发者还是不得不为IE考虑一下,于是,各种浏览器相关的操作,都要多一个特别的判断——专门针对IE浏览器的判断,这里的全屏也不例外.看代码: func ...

随机推荐

  1. 【MySQL】Tinyint 类型问题

    下发字段: `DISTRIBUTION_STATUS` tinyint(1) DEFAULT '0' COMMENT '下发状态,0未下发,1已下发,2已作废', Mybatis封装之后日志打印也确实 ...

  2. 【转载】 图解协程调度模型-GMP模型

    原文地址: https://www.cnblogs.com/codexiaoyi/p/14975236.html =========================================== ...

  3. 强化学习运行环境,atari 2600 游戏模拟器,atari-py库 —— 无法运行游戏,pacman,surround,报错: Segmentation fault (core dumped)

    atari2600运行环境: https://github.com/openai/atari-py 安装环境,以及导入 rom文件这里不进行介绍(前文已介绍): 测试游戏环境rom文件能否正常加载如内 ...

  4. vscode远程连接远程主机上的docker —— 设置命令 —— -p 5001:5001

    突然有这么一个需求,就是使用windows上vscode远程连接到远端linux主机上的docker容器上做开发,各种配置后发现总是在远端主机上创建project时候失败,最后总是在创建远端主机上do ...

  5. VSCode 如何将已编辑好的python文件中的 tab 键缩进转换成4个空格键缩进

    事情起源: 使用vscode维护一个7年前的python项目,发现编辑后运行报错,提示缩进错误,原因是当时的项目使用tab做缩进,而我正在用的vscode是使用4空格做缩进,因此造成了缩进不匹配的问题 ...

  6. 【转载】 实时调度论文中经常出现的术语 ties broken arbitrary的意思 —— 看伪代码时出现 ties broken arbitrary

    看伪代码时突然看到这样的一个Ps标注, ties broken arbitrary,  不明白是啥意思,后来看到下文:https://blog.csdn.net/kangkanglhb88008/ar ...

  7. IntersectionObserver + scrollIntoView 实现电梯导航

    电梯导航也被称为锚点导航,当点击锚点元素时,页面内相应标记的元素滚动到视口.而且页面内元素滚动时相应锚点也会高亮.电梯导航一般把锚点放在左右两侧,类似电梯一样.常见的电梯导航效果如下,比如一些官方文档 ...

  8. 重磅预告!Apache DolphinScheduler 3.2.0 新功能“剧透”

    近期,Apache DolphinScheduler 将迎来 3.2.0 版本的到来.本次发版为大版本发布,将会带来众多大家期待已久的新功能和新改进.为了让用户提前感知到新版本的变化,社区特意提前&q ...

  9. BMC Genomics | 综合代谢组学和转录组学分析揭示了菊花黄酮和咖啡酰奎宁酸的生物合成机制

    杭白菊是一种流行的药用和食用植物,主要通过黄酮类和咖啡酰奎宁酸(CQAs)的存在发挥其生物活性.然而,菊花头状花序中黄酮和CQA生物合成的调控机制尚不清楚. 本研究采用高效液相色谱法测定了菊花头状花序 ...

  10. WPF 设备输入事件封装

    本文主要介绍WPF应用对鼠标输入.触摸屏触笔以及触摸事件的封装 之前有简单说明设备输入类型 WPF 屏幕点击的设备类型 - 唐宋元明清2188 - 博客园 (cnblogs.com) 1.鼠标 - 通 ...