UNPKG

@qooxdoo/framework

Version:

The JS Framework for Coders

91 lines (73 loc) 2.65 kB
/* ************************************************************************ qooxdoo - the new era of web development http://qooxdoo.org Copyright: 2004-2011 1&1 Internet AG, Germany, http://www.1und1.de License: MIT: https://opensource.org/licenses/MIT See the LICENSE file in the project's top-level directory for details. Authors: * Martin Wittemann (martinwittemann) ************************************************************************ */ /** * Mixin holding the handler for the two axis mouse wheel scrolling. Please * keep in mind that the including widget has to have the scroll bars * implemented as child controls named <code>scrollbar-x</code> and * <code>scrollbar-y</code> to get the handler working. Also, you have to * attach the listener yourself. */ qx.Mixin.define("qx.ui.core.scroll.MWheelHandling", { members : { /** * Mouse wheel event handler * * @param e {qx.event.type.Mouse} Mouse event */ _onMouseWheel : function(e) { var showX = this._isChildControlVisible("scrollbar-x"); var showY = this._isChildControlVisible("scrollbar-y"); var scrollbarY = showY ? this.getChildControl("scrollbar-y", true) : null; var scrollbarX = showX ? this.getChildControl("scrollbar-x", true) : null; var deltaY = e.getWheelDelta("y"); var deltaX = e.getWheelDelta("x"); var endY = !showY; var endX = !showX; // y case if (scrollbarY) { var steps = parseInt(deltaY); if (steps !== 0) { scrollbarY.scrollBySteps(steps); } var position = scrollbarY.getPosition(); var max = scrollbarY.getMaximum(); // pass the event to the parent if the scrollbar is at an edge if (steps < 0 && position <= 0 || steps > 0 && position >= max) { endY = true; } } // x case if (scrollbarX) { var steps = parseInt(deltaX); if (steps !== 0) { scrollbarX.scrollBySteps(steps); } var position = scrollbarX.getPosition(); var max = scrollbarX.getMaximum(); // pass the event to the parent if the scrollbar is at an edge if (steps < 0 && position <= 0 || steps > 0 && position >= max) { endX = true; } } // pass the event to the parent if both scrollbars are at the end if ((!endY && deltaX === 0) || (!endX && deltaY === 0) || ((!endX || !endY ) && deltaX !== 0 && deltaY !== 0)) { // Stop bubbling and native event only if a scrollbar is visible e.stop(); } } } });