Skip to content

Commit

Permalink
feat: add Ticker.interval & Ticker.timeout & Ticker.nextTick
Browse files Browse the repository at this point in the history
  • Loading branch information
06wj committed Sep 20, 2016
1 parent edb2290 commit ef7f355
Showing 1 changed file with 67 additions and 3 deletions.
70 changes: 67 additions & 3 deletions src/util/Ticker.js
Original file line number Diff line number Diff line change
Expand Up @@ -130,8 +130,9 @@ var Ticker = Class.create(/** @lends Ticker.prototype */{
}
this._lastTime = startTime;

for(var i = 0, len = tickers.length; i < len; i++){
tickers[i].tick(deltaTime);
var tickersCopy = tickers.slice(0);
for(var i = 0, len = tickersCopy.length; i < len; i++){
tickersCopy[i].tick(deltaTime);
}
},

Expand Down Expand Up @@ -180,6 +181,69 @@ var Ticker = Class.create(/** @lends Ticker.prototype */{
if(index >= 0){
tickers.splice(index, 1);
}
}
},
/**
* 下次tick时回调
* @param {Function} callback
* @return {tickObj}
*/
nextTick:function(callback){
var that = this;
var tickObj = {
tick:function(dt){
that.removeTick(tickObj);
callback();
}
};

that.addTick(tickObj);
return tickObj;
},
/**
* 延迟指定的时间后调用回调, 类似setTimeout
* @param {Function} callback
* @param {Number} duration 延迟的毫秒数
* @return {tickObj}
*/
timeout:function(callback, duration){
var that = this;
var targetTime = new Date().getTime() + duration;
var tickObj = {
tick:function(){
var nowTime = new Date().getTime();
var dt = nowTime - targetTime;
if(dt >= 0){
that.removeTick(tickObj);
callback();
}
}
};
that.addTick(tickObj);
return tickObj;
},
/**
* 指定的时间周期来调用函数, 类似setInterval
* @param {Function} callback
* @param {Number} duration 时间周期,单位毫秒
* @return {tickObj}
*/
interval:function(callback, duration){
var that = this;
var targetTime = new Date().getTime() + duration;
var tickObj = {
tick:function(){
var nowTime = new Date().getTime();
var dt = nowTime - targetTime;
if(dt >= 0){
if(dt < duration){
nowTime -= dt;
}
targetTime = nowTime + duration;
callback();
}
}
};
that.addTick(tickObj);
return tickObj;
}
});

0 comments on commit ef7f355

Please sign in to comment.