如何在 fabricjs 上为圆的 scaleX 和 scaleY 设置动画 canvas
How to animate scaleX and scaleY of a circle on fabricjs canvas
我正在尝试在 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,您已在此处定义:
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>
我正在尝试在 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,您已在此处定义:
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>