如何减慢和加快JavaScript的时间

时间:2014-01-09 15:08:35

标签: javascript

我实现了一个如何在JavaScript中暂停时间的示例。这个例子是http://jsfiddle.net/suska/n4g5U/

// Update of Date class to modify getTime method.
Date.prototype.origGetTime = Date.prototype.getTime;
Date._lastPausedAt;
Date._stopDuration = 0;
Date.prototype.getTime = function() {
    if (Date._lastPausedAt) {
        return Date._lastPausedAt.origGetTime() - Date._stopDuration;
    }
    return new Date().origGetTime() - Date._stopDuration;
};
Date.isPaused = function() {
    return Date._lastPausedAt != null;
};
Date.pause = function() {
    if (!Date._lastPausedAt) {
        Date._lastPausedAt = new Date();
    }               
};
Date.unpause = function() {
    if (Date._lastPausedAt) {
        Date._stopDuration += new Date().origGetTime() - Date._lastPausedAt.origGetTime();
        Date._lastPausedAt = null;
    }
};

任何想法如何修改示例以减慢速度并加快功能?

2 个答案:

答案 0 :(得分:5)

在dooxe的答案上写了一个变体,以避免在时间扭曲之间发生突然跳跃。

var milli = Date.prototype.getTime;
var lastTime = (new Date).getTime();
var curTime = 0;
Date.prototype.getTime = function(){
    var actualTime = milli.call(this);
    curTime += (actualTime - lastTime) * Date._speed;
    lastTime = actualTime;
    return curTime;
};

答案 1 :(得分:1)

这是一个'覆盖'Date.getTime函数的技巧:

var milli = Date.prototype.getTime;
Date.prototype.getTime = function(){
    return milli.call(this) * 5;  
};

使用低于1的因子(我的代码中为5)来减慢时间:

http://jsfiddle.net/uKk9R/