mouseup/touch 关闭动画(淡出)形状
Animate (fade) out shape on mouseup/touch off
我一直在努力学习 fabric.js 并且很难弄清楚如何 target/select 我刚刚添加到 mouse:down
的形状,这样我就可以在 mouse:up
.
上淡出
到目前为止我有什么:jsfiddle
var fingerCanvas = new fabric.Canvas('c');
var fingerMark = new fabric.Ellipse({
left: -100,
top: -100,
fill: '#ff0000',
originX: 'center',
originY: 'center',
rx: 35,
ry: 50
});
//fingerCanvas.add(fingerMark);
fingerCanvas.on('mouse:move', function(obj) {
fingerMark.top = obj.e.y;
fingerMark.left = obj.e.x;
//fingerCanvas.renderAll();
});
fingerCanvas.on('mouse:down', function(obj) {
fingerCanvas.add(fingerMark.clone());
//fingerCanvas.renderAll();
});
fingerCanvas.on('mouse:up', function(obj) {
//fade out the ellipse added by mouse:down event
});
canvas {
border: 1px solid #ccc;
}
<script src="https://cdnjs.cloudflare.com/ajax/libs/fabric.js/1.7.9/fabric.min.js"></script>
<canvas id="c" width="600" height="600"></canvas>
任何熟悉 fabricjs 并能指出正确方向的人?谢谢
在 animate 方法中,给 opacity
属性 设置动画并将值设置为 0。
添加了 abort 方法来停止动画,如果用户在 1 秒之间再次点击。
演示版
var fingerCanvas = new fabric.Canvas('c', {
selection: false
});
var fingerMark = new fabric.Ellipse({
left: 0,
top: 0,
fill: '#ff0000',
originX: 'center',
originY: 'center',
rx: 35,
ry: 50,
evented: false,
opacity: 0
});
var isMouseDown = false;
fingerCanvas.add(fingerMark);
fingerCanvas.on('mouse:move', function(options) {
if (isMouseDown) {
var pointer = fingerCanvas.getPointer(options.e);
fingerMark.set({
left: pointer.x,
top: pointer.y
})
fingerCanvas.requestRenderAll();
}
});
fingerCanvas.on('mouse:down', function(options) {
isMouseDown = true;
var pointer = fingerCanvas.getPointer(options.e);
fingerMark.set({
opacity: 1,
left: pointer.x,
top: pointer.y
});
});
fingerCanvas.on('mouse:up', function(obj) {
isMouseDown = false;
fingerMark.animate('opacity', 0, {
duration: 1000,
abort: function() {
return isMouseDown;
},
onChange: fingerCanvas.requestRenderAll.bind(fingerCanvas),
onComplete: function() {
fingerMark.set({
opacity: isMouseDown ? 1 : 0
});
fingerCanvas.requestRenderAll();
}
})
});
canvas {
border: 1px solid #ccc;
}
<script src="https://cdnjs.cloudflare.com/ajax/libs/fabric.js/3.4.0/fabric.js"></script>
<canvas id="c" width="600" height="600"></canvas>
我一直在努力学习 fabric.js 并且很难弄清楚如何 target/select 我刚刚添加到 mouse:down
的形状,这样我就可以在 mouse:up
.
到目前为止我有什么:jsfiddle
var fingerCanvas = new fabric.Canvas('c');
var fingerMark = new fabric.Ellipse({
left: -100,
top: -100,
fill: '#ff0000',
originX: 'center',
originY: 'center',
rx: 35,
ry: 50
});
//fingerCanvas.add(fingerMark);
fingerCanvas.on('mouse:move', function(obj) {
fingerMark.top = obj.e.y;
fingerMark.left = obj.e.x;
//fingerCanvas.renderAll();
});
fingerCanvas.on('mouse:down', function(obj) {
fingerCanvas.add(fingerMark.clone());
//fingerCanvas.renderAll();
});
fingerCanvas.on('mouse:up', function(obj) {
//fade out the ellipse added by mouse:down event
});
canvas {
border: 1px solid #ccc;
}
<script src="https://cdnjs.cloudflare.com/ajax/libs/fabric.js/1.7.9/fabric.min.js"></script>
<canvas id="c" width="600" height="600"></canvas>
任何熟悉 fabricjs 并能指出正确方向的人?谢谢
在 animate 方法中,给 opacity
属性 设置动画并将值设置为 0。
添加了 abort 方法来停止动画,如果用户在 1 秒之间再次点击。
演示版
var fingerCanvas = new fabric.Canvas('c', {
selection: false
});
var fingerMark = new fabric.Ellipse({
left: 0,
top: 0,
fill: '#ff0000',
originX: 'center',
originY: 'center',
rx: 35,
ry: 50,
evented: false,
opacity: 0
});
var isMouseDown = false;
fingerCanvas.add(fingerMark);
fingerCanvas.on('mouse:move', function(options) {
if (isMouseDown) {
var pointer = fingerCanvas.getPointer(options.e);
fingerMark.set({
left: pointer.x,
top: pointer.y
})
fingerCanvas.requestRenderAll();
}
});
fingerCanvas.on('mouse:down', function(options) {
isMouseDown = true;
var pointer = fingerCanvas.getPointer(options.e);
fingerMark.set({
opacity: 1,
left: pointer.x,
top: pointer.y
});
});
fingerCanvas.on('mouse:up', function(obj) {
isMouseDown = false;
fingerMark.animate('opacity', 0, {
duration: 1000,
abort: function() {
return isMouseDown;
},
onChange: fingerCanvas.requestRenderAll.bind(fingerCanvas),
onComplete: function() {
fingerMark.set({
opacity: isMouseDown ? 1 : 0
});
fingerCanvas.requestRenderAll();
}
})
});
canvas {
border: 1px solid #ccc;
}
<script src="https://cdnjs.cloudflare.com/ajax/libs/fabric.js/3.4.0/fabric.js"></script>
<canvas id="c" width="600" height="600"></canvas>