overscroll
Version:
33 lines (28 loc) • 1.16 kB
JavaScript
import pick from 'object.pick';
import compose from './utils/compose';
var noop = function noop() {};
export function handler(name) {
return function (scope) {
var mode = scope.mode;
var wrap = function wrap(func) {
return function () {
func.call(scope.target, pick(scope.overscroll, ['scrollTop', 'scrollLeft', 'scrollHeight', 'scrollWidth', 'clientHeight', 'clientWidth'].concat(mode === 'scroll' ? [] : ['section', 'positions'])));
};
};
scope.handleCache = scope.handleCache || {};
scope.handleCache[name] = noop;
var initialHandler = scope[name] ? scope[name] : noop;
scope[name] = function () {
scope.handleCache[name]();
wrap(initialHandler)();
};
return compose(function (callback) {
scope.handleCache[name] = scope.handleCache[name] !== noop ? compose(callback, scope.handleCache[name]) : callback;
}, wrap);
};
}
export var handleDestroy = handler('onDestroy');
export var handleBeforeScroll = handler('onBeforeScroll');
export var handleAfterScroll = handler('onAfterScroll');
export var handleScroll = handler('onScroll');
export var handleInit = handler('onInit');