UNPKG

@qooxdoo/framework

Version:

The JS Framework for Coders

128 lines (104 loc) 3.15 kB
/* ************************************************************************ qooxdoo - the new era of web development http://qooxdoo.org Copyright: 2009 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: * Fabian Jakobs (fjakobs) ************************************************************************ */ /** * Timer, which accelerates after each interval. The initial delay and the * interval time can be set using the properties {@link #firstInterval} * and {@link #interval}. The {@link #interval} events will be fired with * decreasing interval times while the timer is running, until the {@link #minimum} * is reached. The {@link #decrease} property sets the amount of milliseconds * which will decreased after every firing. * * This class is e.g. used in the {@link qx.ui.form.RepeatButton} and * {@link qx.ui.form.HoverButton} widgets. * * NOTE: Instances of this class must be disposed of after use * */ qx.Class.define("qx.event.AcceleratingTimer", { extend: qx.core.Object, implement: [qx.core.IDisposable], construct() { super(); this.__timer = new qx.event.Timer(this.getInterval()); this.__timer.addListener("interval", this._onInterval, this); }, events: { /** This event if fired each time the interval time has elapsed */ interval: "qx.event.type.Event" }, properties: { /** * Interval used after the first run of the timer. Usually a smaller value * than the "firstInterval" property value to get a faster reaction. */ interval: { check: "Integer", init: 100 }, /** * Interval used for the first run of the timer. Usually a greater value * than the "interval" property value to a little delayed reaction at the first * time. */ firstInterval: { check: "Integer", init: 500 }, /** This configures the minimum value for the timer interval. */ minimum: { check: "Integer", init: 20 }, /** Decrease of the timer on each interval (for the next interval) until minTimer reached. */ decrease: { check: "Integer", init: 2 } }, members: { __timer: null, __currentInterval: null, /** * Reset and start the timer. */ start() { this.__timer.setInterval(this.getFirstInterval()); this.__timer.start(); }, /** * Stop the timer */ stop() { this.__timer.stop(); this.__currentInterval = null; }, /** * Interval event handler */ _onInterval() { this.__timer.stop(); if (this.__currentInterval == null) { this.__currentInterval = this.getInterval(); } this.__currentInterval = Math.max( this.getMinimum(), this.__currentInterval - this.getDecrease() ); this.__timer.setInterval(this.__currentInterval); this.__timer.start(); this.fireEvent("interval"); } }, destruct() { this._disposeObjects("__timer"); } });