Simple Mouse Wheel support for GWT
1 2 public interface MouseWheelListener { 3 4 public void onMouseWheelUp(int intensity); 5 6 public void onMouseWheelDown(int intensity); 7 8 } 9 10 public class MouseWheel { 11 12 private MouseWheel(Element e, MouseWheelListener listener) { 13 attachMouseWheelListener(e, listener); 14 } 15 16 /** 17 * Sets a MouseWheelListener to a given Element 18 */ 19 public static void setMouseWheelListener(Element e, MouseWheelListener listener) { 20 new MouseWheel(e, listener); 21 } 22 23 24 /** 25 * This method is used by FF 26 * @param event 27 */ 28 private static native void dispatchMouseWheelEvent(JavaScriptObject event) /*-{ 29 30 @br.com.example.client.util.MouseWheel::dispatchMouseWheelEvent(Lcom/google/gwt/core/client/JavaScriptObject;Lbr/com/example/client/util/MouseWheelListener;)(event, this.__mousewheellistener); 31 32 }-*/; 33 34 /** 35 * This method is used by IE and FF 36 * Part of this method was retrieved from http://adomas.org/notes/mouse-wheel.html 37 * 38 * @param event 39 * @param listener 40 */ 41 private static native void dispatchMouseWheelEvent(JavaScriptObject event, MouseWheelListener listener) /*-{ 42 43 if (!event) event = $wnd.event; // For IE 44 45 var delta = 0; 46 if (event.wheelDelta) // IE case, delta is multiple of 120 47 delta = event.wheelDelta / 120; 48 else if (event.detail ) // Mozilla case 49 delta = -event.detail / 3; // different sign and multiple of 3 50 51 if ( delta > 0 ) { 52 listener.@br.com.example.client.util.MouseWheelListener::onMouseWheelUp(I)(delta); 53 } else { 54 listener.@br.com.example.client.util.MouseWheelListener::onMouseWheelDown(I)(-delta); 55 } 56 57 //taken from http://adomas.org/javascript-mouse-wheel/test2.html 58 if (event.preventDefault) 59 event.preventDefault(); 60 event.returnValue = false; 61 62 }-*/; 63 64 65 private native void attachMouseWheelListener(Element e, MouseWheelListener listener) /*-{ 66 67 e.__mousewheellistener = listener; 68 69 // for FF 70 if (e.addEventListener) { 71 e.addEventListener('DOMMouseScroll', @br.com.example.client.util.MouseWheel::dispatchMouseWheelEvent(Lcom/google/gwt/core/client/JavaScriptObject;), false); 72 return; 73 } 74 75 // for IE 76 e.onmousewheel = function(event) { 77 @br.com.example.client.util.MouseWheel::dispatchMouseWheelEvent (Lcom/google/gwt/core/client/JavaScriptObject;Lbr/com/example/client/util/MouseWheelListener;)(event, this.__mousewheellistener); 78 } 79 80 }-*/; 81 82 }
And here is how to use it:
1 2 3 MouseWheel.setMouseWheelListener(RootPanel.get("slot2").getElement(), new MouseWheelListener() { 4 5 public void onMouseWheelUp(int intensity) { 6 Window.alert("up.. " + intensity); 7 } 8 9 public void onMouseWheelDown(int intensity) { 10 Window.alert("down..." + intensity); 11 } 12 13 }); 14
Remember to replace my hardcoded package name (br.com.example) for your own... If you have any suggestion or critic, feel free to tell me... "tserafim" is my gmail username...