Возвращаясь к этой проблеме, ваши предложения помогли мне на этом пути. Документация ExtJS для панели предлагает, как выполнить пользовательскую реализацию перетаскиваемой .
draggable: {
// Config option of Ext.Panel.DD class.
// It's a floating Panel, so do not show a placeholder proxy in the original position.
insertProxy: false,
// Called for each mousemove event while dragging the DD object.
onDrag : function(e){
// Record the x,y position of the drag proxy so that we can
// position the Panel at end of drag.
var pel = this.proxy.getEl();
this.x = pel.getLeft(true);
this.y = pel.getTop(true);
// Keep the Shadow aligned if there is one.
var s = this.panel.getEl().shadow;
if (s) {
s.realign(this.x, this.y, pel.getWidth(), pel.getHeight());
}
},
// Called on the mouseup event.
endDrag : function(e){
this.panel.setPosition(this.x, this.y);
}
}
В моем проекте мне нужно было перетаскивать элементы внутри элемента контейнера, поэтому мне нужно было сделать что-то дополнительное.
Почему?
Поскольку извлечение любой информации о положении выполняется в browser-window-space , и установка позиции, кажется, находится в parent-space . Таким образом, мне нужно было перевести позицию перед установкой конечной позиции панели.
// Called on the mouseup event.
endDrag: function (e) {
if (this.panel.ownerCt) {
var parentPosition = this.panel.ownerCt.getPosition();
this.panel.setPosition(this.x - parentPosition[0], this.y - parentPosition[1]);
} else {
this.panel.setPosition(this.x, this.y);
}
}
Я надеюсь, что это может помочь другим, и еще раз большое спасибо за ваш вклад:)