所以我试图将这个jquery 插件实现为一个 gwtquery 插件。
我正在使用Draggable。大多数代码在 Gwtquery 中很容易实现,但我看到有两个问题区域 1. 事件处理方式:在 jquery 中,事件只是传递给函数,这里是它们声明可拖动的地方:
_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 它将无法访问局部变量。所以我的答案是破解我可以访问事件的 mousemove 函数。同样,此代码仅在 chrome 中触发一次,而在 ff 中则根本不触发
那么我应该如何实施呢?