Как реализовать вращающийся плагин 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 и найти способ поделиться своей переменной с этим классом.

Другие вопросы по тегам