2014-01-29 145 views
0

的jQuery的阵列我有这个 JSFiddle 具有脚本做多个定时器,但只有最后一部作品,我会搜索了很多关于这一点,并没有找到答案。定时器倒计时

我想这个问题是在定时器数组中,但不是很确定,你能帮忙吗?

jQuery.fn.countdown = function (yr, mes, d, h, m, s) { 
    $that = $(this); 
var delta = 0; 

var start = function (yr, mes, d, h, m, s) { 
    theyear = yr; 
    themonth = mes; 
    theday = d; 
    thehour = h; 
    theminutes = m; 
    theseconds = s; 

    var today = new Date(); 
    var todayy = today.getYear(); 
    if (todayy < 1000) todayy += 1900; 
    var todaym = today.getMonth(); 
    var todayd = today.getDate(); 
    var todayh = today.getHours(); 
    var todaymin = today.getMinutes(); 
    var todaysec = today.getSeconds(); 

    var todaystring = montharray[todaym] + " " + todayd + ", " + todayy + " " + todayh + ":" + todaymin + ":" + todaysec; 

    var futurestring = montharray[mes - 1] + " " + d + ", " + yr + " " + thehour + ":" + theminutes + ":" + theseconds; 

    dd = Date.parse(futurestring) - Date.parse(todaystring) + delta; 

    dday = Math.floor(dd/(60 * 60 * 1000 * 24) * 1); 
    dhour = Math.floor((dd % (60 * 60 * 1000 * 24))/(60 * 60 * 1000) * 1); 
    dmin = Math.floor(((dd % (60 * 60 * 1000 * 24)) % (60 * 60 * 1000))/(60 * 1000) * 1); 
    dsec = Math.floor((((dd % (60 * 60 * 1000 * 24)) % (60 * 60 * 1000)) % (60 * 1000))/1000 * 1); 

    if (dday < 0 && dhour < 0 && dmin < 0 && dsec < 1) { 
     alert("ended"); 
     return; 
    } else { 
     $that.html("<span><strong>" + dday + "</strong><span> Days | " + "<span><strong>" + dhour + "</strong></span> Hours | " + "<span><strong>" + dmin + "</strong></span> Minutes"); 
    } 

    setTimeout(function() { 
     start(theyear, themonth, theday, thehour, theminutes, theseconds); 
    }, 1000); 
} 
return { 
    start: function() { 
     start(yr, mes, d, h, m, s); 
    }, 
    addTime: function (ms) { 
     delta += ms; 
    } 
} 

};

这是什么让倒计时。检查jsfiddle中的其余部分

+0

检查的jsfiddle – Severiano

回答

1

问题在于你在声明变量时忽略了var关键字,因此它们是declared as global并且在定时器之间共享。这应该工作(jsfiddle):

var $that = $(this); 

...

var theyear = yr; 
var themonth = mes; 
var theday = d; 
var thehour = h; 
var theminutes = m; 
var theseconds = s; 

...

var dd = Date.parse(futurestring) - Date.parse(todaystring) + delta; 

var dday = Math.floor(dd/(60 * 60 * 1000 * 24) * 1); 
var dhour = Math.floor((dd % (60 * 60 * 1000 * 24))/(60 * 60 * 1000) * 1); 
var dmin = Math.floor(((dd % (60 * 60 * 1000 * 24)) % (60 * 60 * 1000))/(60 * 1000) * 1); 
var dsec = Math.floor((((dd % (60 * 60 * 1000 * 24)) % (60 * 60 * 1000)) % (60 * 1000))/1000 * 1); 
+0

这是确定的,但如果我想知道至极一个具有finnished我怎么能看到它? – Severiano