如何减慢和加快JavaScript的时间

Bor*_*ška 3 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;
    }
};
Run Code Online (Sandbox Code Playgroud)

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

AKH*_*and 6

在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;
};
Run Code Online (Sandbox Code Playgroud)