在ExtJS 4中,默认情况下,拖动代理在拖动操作期间显示在鼠标位置的右下角位置。假设我点击目标的中心并将鼠标移动1 px。我希望代理自己在原始元素上移动1 px。
基本上,我需要代理行为与http://jqueryui.com/demos/draggable/#sortable的示例相同。在此示例中,代理位于原始元素上,然后在拖动鼠标时移动。
我怎样才能做到这一点?
以下示例代码说明了拖动自定义窗口小部件时的问题。
的
的Ext.onReady(函数(){
var hewgt = Ext.define('Demo.widget.Complex', {
extend: 'Ext.panel.Panel',
alias: 'widget.complex',
frameHeader: false,
draggable: false,
layout: 'table',
initComponent: function() {
this.callParent(arguments);
var txtFld;
this.superclass.add.call(this, txtFld = new Ext.form.field.Text({fieldLabel:'test'}));
this.superclass.add.call(this, new Ext.button.Button({text:'Save'}));
}
});
Ext.define('Demo.dd.DragSource', {
extend: 'Ext.dd.DragSource',
b4MouseDown: function(e) {
this.diffX = e.getX() - this.el.getX();
this.diffY = e.getY() - this.el.getY();
this.superclass.setDelta.call(this, 0, 0);
},
getTargetCoord: function(iPageX, iPageY) {
return {x: iPageX - this.diffX, y: iPageY - this.diffY};
}
});
var panel = Ext.create('Ext.panel.Panel', {
layout: 'absolute',
title: 'Navigation'
});
var vp = Ext.create('Ext.container.Viewport', {
layout: 'fit',
items: [panel]
});
var img = Ext.create('Demo.widget.Complex', { width: 400, height:100, x:20, y:20 });
panel.add(img);
new Demo.dd.DragSource(img.getEl());
img = Ext.create('Demo.widget.Complex', { width: 400, height:100, x:20, y:150 });
panel.add(img);
new Demo.dd.DragSource(img.getEl());
}); 的
我是Ext JS的新手。 请告诉我如何正确定位拖动的代理?
由于