jquery - 使用 Fabric 缩放到 Canvas 中心

标签 jquery canvas fabricjs zooming

我正在使用 Fabric.js 在 Canvas 上实现缩放功能。我实现了缩放,但不知何故它没有缩放到 Canvas 中心。它缩放到 Canvas 的左上角。

下面是我的 JS。

<script>
  var canvas = new fabric.Canvas("Canvas-Id", {
    selection: true,
    width: 800,
    height: 400
  });

  canvas.setBackgroundImage('http://i24.photobucket.com/albums/c22/smeagolsfree/TSCHQ.png', canvas.renderAll.bind(canvas), {
    width: canvas.width,
    height: canvas.height
  });

  initializeCanvas(canvas)

</script>

在我的 JS 文件中:

var initializeCanvas;

initializeCanvas = function(canvas) {
  var MAX_ZOOM_IN, MAX_ZOOM_OUT, SCROLL_SIZE, ZOOM_PERCENT, zoomIn, zoomOut;
  SCROLL_SIZE = 120;
  ZOOM_PERCENT = 1.2;
  MAX_ZOOM_IN = 5;
  MAX_ZOOM_OUT = 1;

  zoomIn = function() {
    if(canvas.getZoom() < MAX_ZOOM_IN) {
      canvas.setZoom(canvas.getZoom() * ZOOM_PERCENT);
      $('.flaticon-zoom-in').removeClass('disable');
    } else {
      $('.flaticon-zoom-in').addClass('disable');
    }
    $('.flaticon-zoom-out').removeClass('disable');
  };

  zoomOut = function() {
    if(canvas.getZoom() > MAX_ZOOM_OUT) {
      canvas.setZoom(canvas.getZoom() / ZOOM_PERCENT);
      $('.flaticon-zoom-out').removeClass('disable');
    } else {
      $('.flaticon-zoom-out').addClass('disable');
    }
    $('.flaticon-zoom-in').removeClass('disable');
  };

  $('#zoomIn').click(function() {
    zoomIn();
  });

  $('#zoomOut').click(function() {
    zoomOut();
  });

  $('.taggable-image-canvas-container').bind('mousewheel', function(e) {
    e.preventDefault();
    (e.originalEvent.wheelDelta / SCROLL_SIZE > 0) ? zoomIn() : zoomOut()
  });
};

谁能建议我如何实现缩放到 Canvas 中心。

最佳答案

这是 setZoom 函数的预期行为,它以左上角点作为参数调用 ZoomToPoint:

setZoom: function (value) {
  this.zoomToPoint(new fabric.Point(0, 0), value);
  return this;
}

因此,可以通过调用 zoomToPoint 来实现 Canvas 中心的缩放:

canvas.zoomToPoint(new fabric.Point(canvas.width / 2, canvas.height / 2), canvas.getZoom() / ZOOM_PERCENT);

关于jquery - 使用 Fabric 缩放到 Canvas 中心,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29649031/

相关文章:

javascript - Jquery 在计时器上切换 div

jquery - 如何在使用jquery通过ajax加载内容后检测div高度

javascript - 使用 JS 中的 Github API 拉出所有问题(多页)

javascript - toSVG() 不尊重文本和下划线的来源

javascript - 将 Fabric 项目从 1.6.3 升级到 3.6.x

canvas - 将对象限制在 Canvas 边界时出现问题

javascript - 使用js调整div内iframe的大小

javascript - 使用鼠标坐标制作动画时的requestAnimationFrame

javascript - Canvas 似乎可以工作,但是当我在上面绘图时不显示

c# - 使用 MVVM 以编程方式创建 XAML Canvas