javascript - 如何在fabricjs Canvas 上对圆的scaleX和scaleY进行动画处理

标签 javascript fabricjs

我正在尝试在 fabricjs Canvas 上为对象(在我的例子中为圆圈)的scaleX和scaleY设置动画,但我无法使其工作。这是我的片段

const canvas = new fabric.Canvas('gameCanvas', {selection: false});
fabric.Object.prototype.originX = fabric.Object.prototype.originY = 'center';
let circle;
document.addEventListener('DOMContentLoaded', function(){
    circle = makeCircle(52.69, 17.77);
    canvas.add(circle);
});

document.getElementById('animateBtn').addEventListener('click', function(){
    animateCircle(circle, 1);
});


function makeCircle(x, y)
{
    return new fabric.Circle({
        left: x,
        top: y,
        strokeWidth: 2,
        radius: 10,
        fill: 'yellow',
        stroke: '#666',
        selectable: false,
        hoverCursor: 'default',
        hasControls: false,
        hasBorders: false
    });
    
   
}

function animateCircle(circle, dir)
{
   const minScale = 1;
   const maxScale = 2;
        
    return new Promise(resolve =>
    {
        pointA.animate({
            scaleX: dir ? maxScale : minScale,
            scaleY: dir ? maxScale : minScale
        }, {
                easing: fabric.util.ease.easeOutCubic,
                duration: 3000,
                onChange: canvas.renderAll.bind(canvas),
                onComplete: function ()
                {

                    resolve('finished animating the point');
                }


            });
    });

}
<script src="https://cdnjs.cloudflare.com/ajax/libs/fabric.js/3.0.0/fabric.min.js"></script>
<canvas id="gameCanvas" width="500" height="300" style="border: 2px solid green;"></canvas>
<button id="animateBtn">Animate</button>

最佳答案

animateCircle() 函数中,您尝试将转换应用于名为 pointA 的对象。

嗯,这个对象不存在 - 您想要设置动画的对象称为,您在此处定义了它:

circle = makeCircle(52.69, 17.77);

var counter;
const canvas = new fabric.Canvas('gameCanvas', {
  selection: false
});
fabric.Object.prototype.originX = fabric.Object.prototype.originY = 'center';
let circle;
document.addEventListener('DOMContentLoaded', function() {
  circle = makeCircle(52.69, 17.77);
  canvas.add(circle);
});

document.getElementById('animateBtn').addEventListener('click', function() {
  counter = 0;
  animateCircle(circle, 1);
});


function makeCircle(x, y) {
  return new fabric.Circle({
    left: x,
    top: y,
    strokeWidth: 2,
    radius: 10,
    fill: 'yellow',
    stroke: '#666',
    selectable: false,
    hoverCursor: 'default',
    hasControls: false,
    hasBorders: false
  });


}

function animateCircle(circle, dir) {
  const minScale = 1;
  const maxScale = 2;

  return new Promise(resolve => {
    circle.animate({
      scaleX: dir ? maxScale : minScale,
      scaleY: dir ? maxScale : minScale
    }, {
      easing: fabric.util.ease.easeOutCubic,
      duration: 3000,
      onChange: canvas.renderAll.bind(canvas),
      onComplete: function() {
        if (counter > 4) {
          resolve('finished animating the point');
        } else {
          if (dir == 1)
            animateCircle(circle, 0);
          else
            animateCircle(circle, 1);

        }
        counter++;
      }

    });
  });

}
<script src="https://cdnjs.cloudflare.com/ajax/libs/fabric.js/3.0.0/fabric.min.js"></script>
<canvas id="gameCanvas" width="500" height="300" style="border: 2px solid green;"></canvas>
<button id="animateBtn">Animate</button>

关于javascript - 如何在fabricjs Canvas 上对圆的scaleX和scaleY进行动画处理,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59091981/

相关文章:

javascript - HTML & CSS 视频样式

JavaScript 警告框在 Android 上不显示

javascript - 在 setBackgroundImag 中添加属性并序列化 Canvas

javascript - 优化 Fabric.js 中的性能

javascript - Fabric js 自定义旋转图标仅在 iphone 的 google chrome 浏览器中不可见

fabricjs - 如何在fabric.js中设置图像的高度和宽度?

javascript - 在 Liquid 代码的不同部分使用 javascript 变量

javascript - 如何从字符串值调用作用域上的函数

javascript - 在同一页面上显示多个 Google 图表

javascript - 如何在 Fabric.js 中的 Canvas 之间拖放