Как реализовать вращающийся плагин jquery с помощью gwtquery?
Поэтому я пытаюсь внедрить этот плагин jquery в плагин gwtquery.
Я использую Draggable. Большая часть кода легко реализуется в Gwtquery, но я вижу две проблемные области 1. с тем, как обрабатываются события: в jquery события просто передаются в функцию, где они объявляют draggable:
_rotator.draggable({
helper: 'clone',
revert: false,
start: function (e) {
e.stopPropagation();
e.stopImmediatePropagation();
// Element Width & Height() dims = { 'w': _this.width(), 'h': _this.height() }; // Center Coords center_coords = { 'x': _this.offset().left + _this.width() * 0.5, 'y': _this.offset().top + _this.height() * 0.5 }; }, drag: function (e) { var mouse_coords, angle; e.stopPropagation(); e.stopImmediatePropagation(); _this.rotating = true; // Mouse Coords mouse_coords = { 'x': e.pageX, 'y': e.pageY };
Вещи, чтобы отметить здесь, тоже тускнеет??? за то, что было объявлено, до сих пор не могу понять это. Но код явно останавливает распространение, это важно. Тот же самый код не может быть реализован таким образом, потому что нет доступа к событию.
Вот мой код
DraggableOptions dragOpts = new DraggableOptions(); dragOpts.setHelper(HelperType.CLONE); dragOpts.setRevert(RevertOption.NEVER); dragOpts.setOnDragStart(new DragFunction(){ @Override public void f(DragContext context) { centerCoords.setX(context.getDraggable().getOffsetLeft() + context.getDraggable().getOffsetWidth()); centerCoords.setY(context.getDraggable().getOffsetTop() + context.getDraggable().getOffsetTop()); }}); dragOpts.setOnDrag(new DragFunction(){ @Override public void f(DragContext context) { final Coordinate mouseCoords = GWT.create(Coordinate.class); Double angle; $(_this).mousemove(new Function(){ @Override public boolean f(Event e){ mouseCoords.setX(e.getClientX()); mouseCoords.setY( e.getClientY()); return true; } }); angle = radToDeg(getAngle(mouseCoords, centerCoords)) - 90; rotate(angle); }}); dragOpts.setOnDragStop(new DragFunction(){ @Override public void f(DragContext context) { _this.rotating = false; }}); $(rotator).as(Draggable).draggable(dragOpts );
DragContext не дает доступа к событию. Если я реализую HandlerManager, у него не будет доступа к локальным переменным. Поэтому мой ответ был взломать функцию перемещения мыши, где у меня есть доступ к событиям. опять же, этот код срабатывает только один раз в Chrome, а не вообще то есть FF
Итак, как я должен идти о реализации этого?
1 ответ
Если вы хотите связать свой собственный обработчик события mousemove, вы должны сделать это в методе setOndragStart() и поместить всю свою логику (вычисление угла + вызов функции поворота) в самом обработчике.
В противном случае вы сможете предоставить собственную реализацию DragAndDropManager и найти способ поделиться своей переменной с этим классом.