UNPKG

routebar

Version:

A visual component for navigating between panel cells containing user content.

92 lines (83 loc) 3.04 kB
define(['utils', 'IControl', 'errors', 'hammer'], function(Utils, IControl, Errors, Hammer) { "use strict"; /** * @class * Класс управления панелью на мобильных устройствах с помощью свайпов. * @param {JQuery} mainDiv - элемент, в котором располагается панель. Должен содержать класс rb-wrapper. * @param {function} actionFn - функция, определяющая действие при переходе в одну из сторон (Moving.prototype._moveByActionValue) * @constructor SwipesControl * @extends IControl */ function SwipesControl(mainDiv, actionFn) { if (!(mainDiv instanceof $)) { throw new Errors.ArgumentError('mainDiv', mainDiv); } if (typeof actionFn !== 'function') { throw new Errors.ArgumentError('actionFn', actionFn); } this._isEnable = false; this._mainDiv = mainDiv; this._actionFn = actionFn; this._hammertime = new Hammer(mainDiv[0]); this._hammertime.get('swipe').set({direction: Hammer.DIRECTION_ALL}); } Utils.inherite(SwipesControl, IControl); /** * Применить конфигурацию. Учитывает опцию pointersForSwipe. * @param {Moving~config} config * @memberOf SwipesControl */ SwipesControl.prototype.configure = function(config) { if (typeof config === 'object') { if (config.pointersForSwipe !== undefined) { this._hammertime.get('swipe').set({pointers: config.pointersForSwipe}); } } }; /** * * @returns {boolean} * @memberOf SwipesControl */ SwipesControl.prototype.isEnable = function() { return this._isEnable; }; /** * * @memberOf SwipesControl */ SwipesControl.prototype.enable = function() { if (this._isEnable) return; function swipeHandler(e) { if (self._mainDiv.is(e.target.closest('.rb'))) { self._actionFn(e.direction, [Hammer.DIRECTION_RIGHT, Hammer.DIRECTION_DOWN, Hammer.DIRECTION_LEFT, Hammer.DIRECTION_UP], function(val, defVal) { return val === defVal; }); } e.preventDefault(); e.srcEvent.stopPropagation(); } var self = this; this._hammertime.on('swipe', swipeHandler); this._swipeHandler = swipeHandler; this._isEnable = true; }; /** * * @memberOf SwipesControl */ SwipesControl.prototype.disable = function() { if (!this._isEnable) return; this._hammertime.off('swipe', this._swipeHandler); this._swipeHandler = null; this._isEnable = false; }; /** * * @memberOf SwipesControl */ SwipesControl.prototype.destroy = function() { this.disable(); }; return SwipesControl; });