工作中写的一个小小的倒计时方法,将进入interval时已经走过的时间计算在内。

define("utility",[],function(require,exports,module){
    var utility = new function(){
        var me = this;

        me.deftime = function(options){
            var
            defaults = {
                // 初始
                start : 5,
                // 目标
                target : 0,
                // 时间间隔 单位毫秒
                interval : 1000,
                // 到达之前callback
                startFn : Function,
                // 到达时callback
                targetFn : Function

            },
            configs = $.extend({},defaults,options);
            var
            start = configs.start,
            target = configs.target,
            startFn = configs.startFn,
            targetFn = configs.targetFn;

            // 立即结束
            if(start <= target) return targetFn(start);

            var
            timer,
            interval = configs.interval;

            // 未进入倒计时先执行
            startFn(start);

            // 进入interval判断时 其实已经过了interval秒
            start -= interval/1e3;

            timer =    window.setInterval(function(){
                if(start <= target){
                    // 完成
                    clearInterval(timer);
                    targetFn(start,timer);
                }else{
                    // 进行中 传入定时器 可以在进行中判断清除
                    startFn(start,timer);
                    start -= interval/1e3;
                }
            },interval);
        }

    }

    module.exports = utility;

});