响应式设计
响应式设计
让一个网页是响应式的通常是指让网页能在从桌面到平板再到手机不同尺寸的显示器上显示良好。
拉伸与块状化
一般来说,我们的响应式设计需要解决两个问题:
- 第一是我们的立方体被拉伸了。他们不是立方体了更像是个盒子太高或者太宽。在新标签中打开它然后改变尺寸你就能看到立方体是怎么在宽高上被拉伸的。
- 另一个问题是立方体看起来分辨率太低或者说块状化或者有点模糊,将窗口拉伸的非常大你就能看到问题。
我们先解决拉伸的问题。为此我们要将相机的
function render(time) {
time *= 0.001;
const canvas = renderer.domElement;
camera.aspect = canvas.clientWidth / canvas.clientHeight;
camera.updateProjectionMatrix();
// ...
}
我们现在来解决块状化的问题,
<img src="some128x64image.jpg" style="width:400px; height:200px" />
一个
function resizeRendererToDisplaySize(renderer) {
const canvas = renderer.domElement;
const width = canvas.clientWidth;
const height = canvas.clientHeight;
const needResize = canvas.width !== width || canvas.height !== height;
if (needResize) {
renderer.setSize(width, height, false);
}
return needResize;
}
一旦我们知道了是否需要调整大小我们就调用
function render(time) {
time *= 0.001;
if (resizeRendererToDisplaySize(renderer)) {
const canvas = renderer.domElement;
camera.aspect = canvas.clientWidth / canvas.clientHeight;
camera.updateProjectionMatrix();
}
...
应对HD-DPI 显示器
使用
尽管如此如果你确实想用设备的分辨率来渲染,
- 一种是使用
renderer.setPixelRatio 来告诉three.js 分辨率的倍数。访问浏览器从CSS 像素到设备像素的倍数然后传给three.js 。
renderer.setPixelRatio(window.devicePixelRatio);
- 另一种方法是在调整
canvas 的大小时自己处理。
function resizeRendererToDisplaySize(renderer) {
const canvas = renderer.domElement;
const pixelRatio = window.devicePixelRatio;
const width = (canvas.clientWidth * pixelRatio) | 0;
const height = (canvas.clientHeight * pixelRatio) | 0;
const needResize = canvas.width !== width || canvas.height !== height;
if (needResize) {
renderer.setSize(width, height, false);
}
return needResize;
}
第二种方法从客观上来说更好,在使用