Three.js(五)——Fullscreen and resizing

380 阅读2分钟

携手创作,共同成长!这是我参与「掘金日新计划 · 8 月更文挑战」的第6天,点击查看活动详情 >>

resize事件

resize事件是在浏览器窗口大小发生变化时触发,利用该事件可以跟踪窗口大小的变化来动态调整页面元素的显示。

window.addEventListener('resize', () => {
    // 监听浏览器窗口的resize事件
    console.log("window has been resized");
    
    // Update sizes  更新canvas画布尺寸
    sizes.width = window.innerWidth;
    sizes.height = window.innerheight;

    // Updata camera  更新相机属性
    camera.aspect = sizes.width / sizes.height;
    // 自适应
    camera.updateProjectionMatrix();

    // Update renderer
    renderer.render(sizes.width, sizes.height);
})

window.devicePixelRatio 当前设备像素比

它是设备上物理像素和设备独立像素( device-independent pixels (dips) )的比例,即:devicePixelRatio = 屏幕物理像素/设备独立像素。
Window接口的devicePixelRatio返回当前显示设备的物理像素分辨率与CSS像素分辨率之比。 此值也可以解释为像素大小的比率:一个CSS像素的大小与一个物理像素的大小。 简单来说,它告诉浏览器应使用多少屏幕实际像素来绘制单个CSS像素。
我们日常所需的像素比最大为2,更大就没有什么必要了。

renderer.setPixelRatio(Math.min(window.devicePixelRatio, 2));
// 所以,最小值为1.25,最大为2
// console.log(window.devicePixelRatio);   // 1.25

dblclick 双击全屏事件

当双击元素时,会发生 dblclick 事件。

Fullscreen介绍

让你可以简单地控制浏览器,使得一个元素与其子元素,如果存在的话,可以占据整个屏幕,并在此期间,从屏幕上隐藏所有的浏览器用户界面以及其他应用。

API作用
document.fullscreenElement 属性被展示为全屏模式的element元素
document.requestFullscreen() 方法让当前文档进入全屏模式,要做好兼容前辍处理
document.exitFullscreen() 方法让当前文档退出全屏模式,跟requestFullscreen一样要做好兼容前辍处理
// 双击事件
// Safari不支持
window.addEventListener("dblclick", () => {
    // console.log("double click");
    const fullscreenElement = document.fullscreenElement || document.webKitFullscreenElement;
    if (!fullscreenElement) {
        // 双击全屏
        canvas.requestFullscreen()
        // console.log("go fullscreen");
    } else {
        // 再次双击退出全屏
        document.exitFullscreen();
        // console.log("leave fullscreen");
    }
})

Safari支持的情况也可以做,但是相对比较复杂:

// Safari支持做法↓:
window.addEventListener("dblclick", () => {
        // 双击全屏
            canvas.requestFullscreen();
        } else if (canvas.webKitRequestFullscreen) {
            canvas.webKitRequestFullscreen();
        }
    } else {
        // 再次双击退出全屏
        if (!document.exitFullscreen) {
            document.exitFullscreen();
        } else if (document.webKitRequestFullscreen) {
            document.webkitExitFullscreen();
        }
    }
})