2015-11-23 1 views
0

Я перетаскиваю элемент-заполнитель (относительно окна) с боковой панели и отбрасывая его на подкачку/масштабируемую «сцену», которая использует преобразования CSS.Как вычислить позицию для нового элемента внутри преобразованного контейнера

При отбрасывании его следует заменить новым элементом с абсолютным позиционированием внутри развернутой «сцены» в том же месте, визуально говоря.

Я близок, но рассчитанная позиция верна только в том случае, когда масштаб равен 1, и я не могу понять, как программно определить масштаб.

JSFiddle: http://jsfiddle.net/a4v2guvt/

Если уменьшать (MouseWheel) и перетащите элемент на сцену, это легко увидеть проблему.

Вот что я использую в настоящее время:

$(theNewItem).css({ 
     'top': dropPosition.top + (currentY - (currentY * 2)), 
     'left': dropPosition.left + (currentX - (currentX * 2)) 
    });` 

Замечания по коду: dropPosition является $.offset() из перемещенного элемента (относительно окна) в данный момент он «упал "и currentY и currentX - это преобразованные значения x, y элемента контейнера. Я пытаюсь добавить новый элемент в, который на scale(1) можно считать 0,0 относительно окна.

Примечание стороны:(currentY - (currentY * 2) мой Дерпи способ преобразовать отрицательное число, используемое в преобразовании матрицы положительное число, так как я не знаю ни одной другой способ преобразования +/- с верхней части моей головы.

+0

Можете ли вы опубликовать скрипку или обновить свой вопрос с сниппета ? Поэтому мы можем вам помочь. –

+0

@MoshFeu добавил скрипку к оригинальному сообщению. См. Здесь: http://jsfiddle.net/a4v2guvt/ – Vertical3

ответ

0

Наконец понял это (не спрашивайте меня, как!)

Вот решение для тех, кто еще, что может работать в этом:

'top': (dropPosition.top - containerPosition.top)/currentScale, 
'left': (dropPosition.left - containerPosition.left)/currentScale