UNPKG

rc-tween-one

Version:
118 lines (108 loc) 2.92 kB
'use strict'; Object.defineProperty(exports, "__esModule", { value: true }); var _raf = require('raf'); var _raf2 = _interopRequireDefault(_raf); function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { 'default': obj }; } var getTime = Date.now || function () { return new Date().getTime(); }; /* eslint-disable func-names */ var Ticker = function Ticker() {}; Ticker.prototype = { tickFnArray: [], tickKeyObject: {}, id: -1, tweenId: 0, frame: 0, perFrame: Math.round(1000 / 60), elapsed: 0, lastUpdate: getTime() }; var p = Ticker.prototype; p.add = function (fn) { var key = 'TweenOneTicker' + this.tweenId; this.tweenId++; this.wake(key, fn); return key; }; p.wake = function (key, fn) { var _this = this; this.tickKeyObject[key] = fn; this.tickFnArray = Object.keys(this.tickKeyObject).map(function (k) { return _this.tickKeyObject[k]; }); if (this.id === -1) { this.id = (0, _raf2['default'])(this.tick); } }; p.clear = function (key) { var _this2 = this; delete this.tickKeyObject[key]; this.tickFnArray = Object.keys(this.tickKeyObject).map(function (k) { return _this2.tickKeyObject[k]; }); }; p.sleep = function () { _raf2['default'].cancel(this.id); this.id = -1; this.frame = 0; }; var ticker = new Ticker(); p.tick = function (a) { ticker.elapsed = getTime() - ticker.lastUpdate; ticker.lastUpdate += ticker.elapsed; ticker.tickFnArray.forEach(function (func) { return func(a); }); // 如果 object 里没对象了,自动杀掉; if (!ticker.tickFnArray.length) { ticker.sleep(); return; } if (!ticker.frame) { ticker.frame++; } else { ticker.frame += Math.round(ticker.elapsed / ticker.perFrame); } ticker.id = (0, _raf2['default'])(ticker.tick); }; var timeoutIdNumber = 0; p.timeout = function (fn, time) { var _this3 = this; if (!(typeof fn === 'function')) { return console.warn('not function'); // eslint-disable-line } var timeoutID = 'timeout' + Date.now() + '-' + timeoutIdNumber; var startFrame = this.frame; this.wake(timeoutID, function () { var moment = (_this3.frame - startFrame) * _this3.perFrame; if (moment >= (time || 0)) { _this3.clear(timeoutID); fn(); } }); timeoutIdNumber++; return timeoutID; }; var intervalIdNumber = 0; p.interval = function (fn, time) { var _this4 = this; if (!(typeof fn === 'function')) { console.warn('not function'); // eslint-disable-line return null; } var intervalID = 'interval' + Date.now() + '-' + intervalIdNumber; var starFrame = this.frame; this.wake(intervalID, function () { var moment = (_this4.frame - starFrame) * _this4.perFrame; if (moment >= (time || 0)) { starFrame = _this4.frame; fn(); } }); intervalIdNumber++; return intervalID; }; exports['default'] = ticker; module.exports = exports['default'];