2013-06-26 1 views
0

В борьбе со смещением с fabric.js - какой лучший подход?fabric.js Офсетное решение

Я в принципе позволяю пользователю нарисовать окно, и я хочу убедиться, что у меня есть поле, нарисованное с точными начальными и конечными координатами действия перетаскивания.

http://jsfiddle.net/mojo5000/P7gAC/4/

... 
    left: x + width/2 - 8, 
    top: y + height/2 - 8, 
... 

Я в основном пришлось немного такелажа с левым и верхним значением. Кажется, это работает. Есть лучший способ сделать это?

ответ

2

Вы не учитывали позиционирование элемента холста. Используйте следующее:

var canvas = new fabric.Canvas('c'); 

canvas.on("after:render", function(){canvas.calcOffset();}); 

var started = false; 
var x = 0; 
var y = 0; 
var width = 0; 
var height = 0; 

canvas.on('mouse:down', function(options) { 
    //console.log(options.e.clientX, options.e.clientY); 

    x = options.e.clientX; 
    y = options.e.clientY; 

    canvas.on('mouse:up', function(options) { 

    width = options.e.clientX - x; 
    height = options.e.clientY - y; 

    var square = new fabric.Rect({ 

     width: width, 
     height: height, 
     left: x + width/2 - canvas._offset.left, 
     top: y + height/2 - canvas._offset.top, 
     fill: 'red', 
     opacity: .2 
    }); 
    canvas.add(square); 
    canvas.off('mouse:up'); 
    $('#list').append('<p>Test</p>'); 

    }); 

}); 

Как вы можете видеть в коде, координаты элемента холста задаются: canvas._offset.left и canvas._offset.top

+0

Это может быть старая нить, но если вы можете ответить на мой вопрос, было бы действительно полезно. Поэтому мой вопрос заключается в том, как вы можете достичь этого, используя элементы . Было бы просто добавление прослушивателя событий в теги img, а затем ожидание мыши: перетащите, если это даже событие. – RepeaterCreeper

+0

@RepeaterCreeper Я думаю, вам лучше задать новый вопрос. Направьте это, если он будет отмечен как дубликат. – simonzack

+0

Я на самом деле уже сделал. Нажмите [здесь] (http://stackoverflow.com/questions/31999832/drag-and-drop-image-to-canvas-fabricjs) для перенаправления. Если бы вы могли дать мне ответ, который был бы потрясающим. Объяснение, которое у меня есть по моему собственному вопросу, немного запутанно, поэтому дайте мне знать, нужна ли вам какая-либо помощь в понимании того, чего я пытаюсь достичь. – RepeaterCreeper