【发布时间】:2018-07-12 17:39:35
【问题描述】:
即使用户放大或缩小,是否有任何解决方案可以保持对象大小?我想在谷歌地图上实现类似的行为。因此,如果我有一个高度和宽度为 20 的对象(对象组),即使我放大它,默认情况下它仍应为 20 像素。现在我的行为是,当用户放大或缩小图像时,图像会变大/变小。我还循环了画布上的所有对象,然后为其设置了 scaleX 和 scaleY,但结果对我来说太迟钝了。
var canvas = new fabric.Canvas('c') ;
var circle = new fabric.Circle({
radius: 20, fill: 'red', left: 100, top: 100
});
var triangle = new fabric.Triangle({
fill: 'red', left: 200, top: 200
});
canvas.add(circle, triangle) ;
//canvas.zoomToPoint(new fabric.Point(canvas.getCenter().left, canvas.getCenter().top,1)) ;
$(function(){
$('#zoomIn').click(function(){
canvas.setZoom(canvas.getZoom() * 1.1 ) ;
}) ;
$('#zoomOut').click(function(){
canvas.setZoom(canvas.getZoom() / 1.1 ) ;
}) ;
}) ;
#canvasContainer {border: dotted gray thin ;}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/fabric.js/1.7.22/fabric.min.js"></script>
<button id="zoomIn">+</button>
<button id="zoomOut">-</button>
<div id="canvasContainer">
<canvas id="c" width="400" height="400"></canvas>
</div>
【问题讨论】:
-
如果要保持对象的比例,那么画布缩放有什么用?
-
我使用缩放级别除以 1 做了一些工作,但输出对我来说太迟钝了。
-
我已经更新了小提琴示例。现在我在放大或缩小时遇到了很大的延迟,因为该组由 6 种不同类型的对象组成。
-
我的问题的正确例子是谷歌地图。我希望对象不会变大或变小,即使我放大或缩小它。
-
标记延迟可以来自fabric 1.5版本。根据您编写的代码量和您的项目,尝试切换到 2.0 或至少 1.7.22 您的地图上有多少组 6 个对象?
标签: javascript html5-canvas fabricjs scaling