【发布时间】:2019-09-02 16:33:43
【问题描述】:
考虑有一个大型 (2000x1000) 舞台,其中包含一些文字。舞台缩小到 1000x500,使文本无法阅读。然后我们尝试通过放大来放大文本。
预期:文本应该在某个时候再次变得可读。
实际:无论我们放大多少,文本仍然不可读(模糊)。
运行 sn-p 后尝试放大页面(在桌面上使用原生浏览器缩放):
const stage = new Konva.Stage({
container: 'container',
width: 2000,
height: 1000,
});
const layer = new Konva.Layer();
stage.add(layer);
const rect = new Konva.Text({
x : 50, y : 50, width: 100, height: 100,
fontSize: 12,
text: "This text should be readable when the viewport gets downscaled"
});
layer.add(rect).draw();
stage.scale({x: 0.5, y: 0.5});
stage.setAttrs({width: 1000, height: 500});
stage.draw();
<script src="https://cdnjs.cloudflare.com/ajax/libs/konva/2.6.0/konva.js"></script>
<div id="container"></div>
仅使用 CSS 缩小可以避免质量损失,如下所示:
const stage = new Konva.Stage({
container: 'container',
width: 2000,
height: 1000,
});
const layer = new Konva.Layer();
stage.add(layer);
const rect = new Konva.Text({
x : 50, y : 50, width: 100, height: 100,
fontSize: 12,
text: "This text should be readable when the viewport gets downscaled"
});
layer.add(rect).draw();
stage.getChildren().forEach(function(layer) {
layer.canvas._canvas.style.width = "1000px";
layer.canvas._canvas.style.height = "500px";
layer.hitCanvas.setSize(1000, 500);
layer.hitCanvas.context.scale(0.5, 0.5);
});
stage.draw();
<script src="https://cdnjs.cloudflare.com/ajax/libs/konva/2.6.0/konva.js"></script>
<div id="container"></div>
注意文本在特定缩放级别如何变得可读。
解决方法破坏了 Konvajs 抽象。它可能会导致什么问题?有没有更好的方法,只使用 Konvajs 公开的公共方法?
在 fabric.js 中可以这样做 (complete example here):
canvas.setDimensions({width: '1000px', height: '500px'}, {cssOnly: true});
【问题讨论】:
-
如何缩放?在移动设备上触摸原生缩放?
-
本机浏览器缩放。我刚刚注意到 StackOverflow 没有在我的手机上运行 sn-ps。请使用桌面浏览器。
标签: javascript css konvajs