javascript - FabricJS 动画 :selected object on canvas during mouse:up and :down

标签 javascript jquery animation canvas fabricjs

我正在尝试使用 FabricJS 在选择任何对象时为其设置动画。

因此,当选择一个对象时,鼠标从中心“缩小”:向下(宽度减少 10 像素,高度减少 10 像素)

在 mouse:up 上,它返回到原始大小和状态。

我不知道是否需要为此使用 FabricJS 内置动画。我希望它能够线性增长和收缩。

现在我的Fiddle几乎什么也没做,我无法在没有错误的情况下走得足够远。

有人有这样或类似的例子吗?我找不到任何有关在选择 mouse:up/:down 时更改 FabricJS 对象的外观的信息。

(function() {
  var canvas = this.__canvas = new fabric.Canvas('canvas');
  var touchedObject;

  var rect = new fabric.Rect({
    left: 50,
    top: 50,
    width: 50,
    height: 50,
    fill: 'blue',
    hasBorders: false,
  });
  canvas.add(rect);

  var rect2 = new fabric.Rect({
    left: 190,
    top: 50,
    width: 50,
    height: 50,
    fill: 'red',
    hasBorders: false,
  });
  canvas.add(rect2);

  canvas.on('object:selected', function(evn) {
    /*animate({
      'width': ,
      'height':
    }, {
      duration: 200,
    });*/
  });

  canvas.renderAll();
})();

最佳答案

您可以使用 fabric.util.animate() 来实现这一点方法。

(function() {
    var canvas = this.__canvas = new fabric.Canvas('canvas');
    var touchedObject;
    var rect = new fabric.Rect({
        left: 50,
        top: 50,
        width: 50,
        height: 50,
        fill: '#07C',
        hasBorders: false,
    });
    canvas.add(rect);
		
    // disable controls and set hover-cursor
    canvas.forEachObject(function(o) {
        o.hasBorders = o.hasControls = false;
    });
    canvas.hoverCursor = 'pointer';
		
    // mouse events
    canvas.on('mouse:down', function(e) {
        animate(e, 1);
    });
    canvas.on('mouse:up', function(e) {
        animate(e, 0);
    });

    function animate(e, p) {
        if (e.target) {
            fabric.util.animate({
                startValue: e.target.get('height'),
                endValue: e.target.get('height') + (p ? -10 : 50 - e.target.height),
                duration: 200,
                onChange: function(v) {
                    e.target.setHeight(v);
                    canvas.renderAll();
                },
                onComplete: function() {
                    e.target.setCoords();
                }
            });
            fabric.util.animate({
                startValue: e.target.get('width'),
                endValue: e.target.get('width') + (p ? -10 : 50 - e.target.width),
                duration: 200,
                onChange: function(v) {
                    e.target.setWidth(v);
                    canvas.renderAll();
                },
                onComplete: function() {
                    e.target.setCoords();
                }
            });
            fabric.util.animate({
                startValue: e.target.get('top'),
                endValue: e.target.get('top') + (p && 5),
                duration: 200,
                onChange: function(v) {
                    e.target.setTop(v);
                    canvas.renderAll();
                },
                onComplete: function() {
                    e.target.setCoords();
                }
            });
            fabric.util.animate({
                startValue: e.target.get('left'),
                endValue: e.target.get('left') + (p && 5),
                duration: 200,
                onChange: function(v) {
                    e.target.setLeft(v);
                    canvas.renderAll();
                },
                onComplete: function() {
                    e.target.setCoords();
                }
            });
        }
    }
    canvas.renderAll();
})();
#canvas {
  border: 1px solid lightgrey;
}
<script src="https://cdnjs.cloudflare.com/ajax/libs/fabric.js/1.4.0/fabric.min.js"></script>
<canvas id="canvas" width="150"></canvas>

关于javascript - FabricJS 动画 :selected object on canvas during mouse:up and :down,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43471209/

相关文章:

javascript - Angular 动画查询错误地返回零元素

javascript - react native : Can you conditionally render JSX based on the existence of a string?

jquery - Yii:CGridView 上 AJAX 操作的动态更新 ID

mysql - Maya 和数据库

html - 在不扭曲图像的情况下动画div高度

javascript - jQuery:如果数组中存在键,则获取值

javascript - vue 带自动滚动的大型列表

javascript - jQuery 从类中的所有元素获取属性和值

javascript - 单击和鼠标按下 Jquery 1.9.1

ios - UIPageViewController : flipping animation interrupted.(iOS7 与 iOS6)