我正在使用Fabric.js和React/Redux,我試圖在canvas上實現以下效果:(注意我有2個標尺在平移時不應該左右移動的頂部和左側,只是水平和垂直)。Fabric.js相對於getZoom()和getWidth()/ getHeight()的位置元素
這是我想要得到的效果視頻:https://vid.me/qs5Q
我有以下代碼:
var canvas = new fabric.Canvas('c');
var topRuler = new fabric.Text('this is the top ruler', {
top: 0,
left: 60,
selectable: false
});
var leftRuler = new fabric.Text('this is the left ruler', {
top: 150,
left: -125,
selectable: false
});
var circle = new fabric.Circle({
radius: 20,
fill: 'green',
left: 180,
top: 100
});
var triangle = new fabric.Triangle({
fill: 'green',
left: 150,
top: 170
});
var panning = false;
var panningOn = false;
leftRuler.setAngle(-90).setCoords();
canvas.add(circle, triangle, topRuler, leftRuler);
canvas.renderAll();
canvas.on('mouse:up', function(e) {
if (panningOn) panning = false;
});
canvas.on('mouse:down', function(e) {
if (panningOn) panning = true;
});
canvas.on('mouse:move', function(e) {
if (panning && e && e.e) {
moveX = e.e.movementX;
moveY = e.e.movementY;
topRuler.set({
top: topRuler.top - moveY,
left: topRuler.left - moveX
});
leftRuler.set({
top: leftRuler.top - moveY,
left: leftRuler.left - moveX
});
canvas.relativePan(new fabric.Point(moveX, moveY));
}
});
$('#toggle').click(function() {
panningOn = !panningOn;
canvas.selection = !panningOn;
canvas.defaultCursor = 'default';
$('#toggle').html('Turn Panning ON');
if (panningOn) {
$('#toggle').html('Turn Panning OFF');
canvas.defaultCursor = 'move';
}
});
/* ZOOM FUNCTIONS */
$('#zoomIn').click(function(){
canvas.setZoom(canvas.getZoom() * 1.1) ;
});
$('#zoomOut').click(function(){
canvas.setZoom(canvas.getZoom()/1.1) ;
});
這是一個工作的jsfiddle:https://jsfiddle.net/z3p8utmc/19/ 的代碼是不完整的,因爲我不知道如何定位統治者,試圖用viewPort,畫布大小等來玩,但沒有達到相同的效果。
謝謝你的幫助。
親愛的@Tim你介意看看這個請:http://stackoverflow.com/questions/42781527/fabric-js-draw-regular-octagon? –
會不會,matey ... –