纯Javascript倒数计时器(Vanilla.js)
Pure Javascript countdown timer (Vanilla.js)
我有以下两个功能:
// COUNTDOWN TIMER FUNCTION
function refillTimer(theTime) {
var timer = new Date().getTime() + theTime;
$('#refillTimer').countdown(timer).on('update.countdown', function(event) {
$(this).show();
var $this = $(this);
if(event.elapsed){
$this.html(event.strftime('0:0:0'));
}else{
$this.html(event.strftime('<strong>%S</strong>'));
}
}).on('finish.countdown', function(){
$(this).hide();
});
}
// ON SWIPE PERFORM ACTION
async function swipeAction(currentElementObj, swipeType) {
var cardId = currentElementObj.getAttribute("value");
var dataString = {
card: cardId,
swipe: swipeType
};
let response = await new Promise((resolve, reject) => {
try {
var xhr = new XMLHttpRequest();
xhr.open("POST", "processes/swipe.php", true);
xhr.setRequestHeader("Content-Type", "application/json");
xhr.responseType = "json";
xhr.send(JSON.stringify(dataString));
xhr.onreadystatechange = function () {
let resObj = xhr.response;
if(xhr.readyState == 4 && xhr.status == 200 && resObj) {
$('#content').modal('show');
refillTimer(resObj.nextswipe); // resObj.nextswipe returns 37000 seconds
}
};
}catch(e){
reject(e.toString());
}
});
}
在上面的代码中,您可以看到我有一个倒数计时器,我正试图在 swipeAction()
函数中使用它。这里的问题是定时器没有按照提供的输入工作。例如,refilTImer(theTime)
函数中作为 theTime
传递的输入是 37000。因此,该函数应花费 37000 秒,将其转换为 HH:MM:SS
并相应地开始倒计时显示。就那么简单。但是,每次通话时,倒数计时器都会从 37 秒开始。秒数过去了 43650,计时器只从 43 秒开始倒计时。我不明白为什么会这样。解决办法是什么?
您正在通过 毫秒,而不是秒。
查看您正在使用的函数的定义:
getTime() MDN
number of milliseconds...
并猜测您的插件是 The Final Countdown
finalDate
The target date that you are seeking to countdown. This argument can be one of the following:
- A native date object
- The milliseconds from Epoch time
- Formatted string
显示通过37000是37000毫秒,所以37秒。
我有以下两个功能:
// COUNTDOWN TIMER FUNCTION
function refillTimer(theTime) {
var timer = new Date().getTime() + theTime;
$('#refillTimer').countdown(timer).on('update.countdown', function(event) {
$(this).show();
var $this = $(this);
if(event.elapsed){
$this.html(event.strftime('0:0:0'));
}else{
$this.html(event.strftime('<strong>%S</strong>'));
}
}).on('finish.countdown', function(){
$(this).hide();
});
}
// ON SWIPE PERFORM ACTION
async function swipeAction(currentElementObj, swipeType) {
var cardId = currentElementObj.getAttribute("value");
var dataString = {
card: cardId,
swipe: swipeType
};
let response = await new Promise((resolve, reject) => {
try {
var xhr = new XMLHttpRequest();
xhr.open("POST", "processes/swipe.php", true);
xhr.setRequestHeader("Content-Type", "application/json");
xhr.responseType = "json";
xhr.send(JSON.stringify(dataString));
xhr.onreadystatechange = function () {
let resObj = xhr.response;
if(xhr.readyState == 4 && xhr.status == 200 && resObj) {
$('#content').modal('show');
refillTimer(resObj.nextswipe); // resObj.nextswipe returns 37000 seconds
}
};
}catch(e){
reject(e.toString());
}
});
}
在上面的代码中,您可以看到我有一个倒数计时器,我正试图在 swipeAction()
函数中使用它。这里的问题是定时器没有按照提供的输入工作。例如,refilTImer(theTime)
函数中作为 theTime
传递的输入是 37000。因此,该函数应花费 37000 秒,将其转换为 HH:MM:SS
并相应地开始倒计时显示。就那么简单。但是,每次通话时,倒数计时器都会从 37 秒开始。秒数过去了 43650,计时器只从 43 秒开始倒计时。我不明白为什么会这样。解决办法是什么?
您正在通过 毫秒,而不是秒。
查看您正在使用的函数的定义:
getTime() MDN
number of milliseconds...
并猜测您的插件是 The Final Countdown
finalDate
The target date that you are seeking to countdown. This argument can be one of the following:
- A native date object
- The milliseconds from Epoch time
- Formatted string
显示通过37000是37000毫秒,所以37秒。