RahulSingla интегрировал iScroll с extjs для достижения этой функциональности здесь . Это с extjs3 однако. На сегодняшний день мне нужно то же самое в extjs4 для панели сетки. Поэтому я попробую что-то в этом духе, но с методами прокрутки extjs вместо iScroll. Я обновлю, если у меня что-нибудь получится.
UPDATE:
Готово. (для того, что мне было нужно) Оказалось довольно простым добавить прокрутку перетаскиванием из прослушивателя на панели сетки, не нужно было много кода:
listeners: {
'itemmousedown': function(view, rec, item, idx, event) {
var startX = event.getX();
var startY = event.getY();
var grid = view.up('gridpanel');
var div = grid.getEl();
var body = Ext.getBody();
body.setStyle('cursor','-moz-grabbing'); //doesn't work in 4.0.7+
div.on('mousemove', function(e) {
x = e.getX(), y = e.getY()
grid.scrollByDeltaX(startX - x);
grid.scrollByDeltaY(startY - y);
startX = x
startY = y
});
body.on('mouseup', function(e){
body.setStyle('cursor','default'); //doesn't work in 4.0.7+
div.removeAllListeners();
body.removeAllListeners();
});
body.on('mouseleave', function(e, tgt){
body.setStyle('cursor','default'); //doesn't work in 4.0.7+
div.removeAllListeners();
body.removeAllListeners();
});
}
}
Я проверял это только на FF, потому что это все, что мы используем в нашей интрасети. Я не уверен, что в IE есть функции mousemove .getX()
или .getY()
, так что их, возможно, придется настроить.
Для других панелей (что-то кроме панели сетки) вы могли бы просто заменить слушатель itemmousedown
просто слушателем mousedown
, чтобы иметь те же функциональные возможности.