Una posible implementación de las respuestas de mike y waitingforatrain en GWT. En la cabeza html gestionar los eventos del ratón hacia arriba (código JavaScript):
var mouseUpHook = false;
$(document).mouseup(function() {
if (mouseUpHook) {
mouseUpHook(null);
mouseUpHook = false;
}
});
Deje que su clase Widget personalizadas implementan mouseDownHandler y MouseUpHandler, y añadir esas líneas en su constructor para recibir eventos de ratón (código Java):
addDomHandler(this, MouseDownEvent.getType());
addDomHandler(this, MouseUpEvent.getType());
por último, añadir esos métodos en su clase Widget personalizado (código java y JavaScript):
@Override
public void onMouseUp (MouseUpEvent event) {
removeMouseUpHook();
// ... do something else
}
private native void hookMouseUp() /*-{
$wnd.$('body').addClass('noselect');
var myThis = this;
$wnd.mouseUpHook = function() {
[email protected]::onMouseUp(Lcom/google/gwt/event/dom/client/MouseUpEvent;)(null);
};
}-*/;
private native void removeMouseUpHook() /*-{
$wnd.$('body').removeClass('noselect');
}-*/;
@Override
public void onMouseDown (MouseDownEvent event) {
hookMouseUp();
// ... do something else
event.preventDefault();
}
última línea es útil para evitar el arrastre de la imagen. De hecho, seleccionar por el usuario: ninguno no es suficiente.
¡Funciona como un amuleto, gracias! Luché con esto por horas. – Duopixel
* Importante * Esto no funcionará cuando se seleccione texto (al menos en Chrome, ya que se tratará como un evento de arrastre). Ver mi respuesta a continuación para la solución – bcoughlan