Ich habe einen Javascript/Jquery Timer, an dem ich gearbeitet habe und bis zu diesem Zeitpunkt habe ich nur benötigt, um den Timer zu starten und zurückzusetzen. Ich muss jetzt eine Funktion hinzufügen, um sie anzuhalten, und ich bin mir nicht sicher, wie ich das machen soll.Javascript Timer implementieren Pausenfunktion
Ich war in der Lage, den Timer durch Löschen des Intervalls zu pausieren, aber jetzt muss ich herausfinden, wie es fortgesetzt wird, wenn ich wieder auf Start klicke, wo mein Problem ist.
Ich versuchte, das Intervall zurück zu der Funktion, aber das schien nicht zu helfen.
Irgendwelche Gedanken?
JS Fiddle: https://jsfiddle.net/3dweffy8/3/
// Define a global so we can clear it in our reset
var interval;
(function($) {
// Define our plugins vars if they were not set
$.fn.upCount = function(options, callback) {
var settings = $.extend({
startTime: null,
offset: null,
reset: null,
resume: null
}, options);
// Save container
var container = this,
globalContainer = container.parent().html();
// get the current date
var currentDate = function() {
var date = new Date();
return date;
};
// Define some global vars
var original_date = currentDate();
var target_date = new Date('12/31/2030 12:00:00'); // Count up to this date
// Are we resetting our counter?
if (settings.reset) {
return reset();
}
// Do we need to start our counter at a certain time if we left and came back?
if (settings.startTime) {
resumeTimer(newDate);
}
// Lets resume from where we paused
if (settings.resume) {
// not sure how to continue from where we paused...
}
// Are we pausing the timer?
if (settings.pause) {
return clearInterval(interval);
}
// Reset the counter by destroying the element it was bound to
function reset() {
var timerContainer = $('[name=timerContainer]');
timerContainer.empty().append(globalContainer).find('.time').empty().append('00');
clearInterval(interval);
}
// Given a start time, lets set the timer
function resumeTimer(startTime) {
original_date = startTime;
}
// Start the counter
function countUp() {
// Set our current date
var current_date = currentDate();
// difference of dates
var difference = current_date - original_date;
if (current_date >= target_date) {
// stop timer
clearInterval(interval);
if (callback && typeof callback === 'function') callback();
return;
}
// basic math variables
var _second = 1000,
_minute = _second * 60,
_hour = _minute * 60,
_day = _hour * 24;
// calculate dates
var days = Math.floor(difference/_day),
hours = Math.floor((difference % _day)/_hour),
minutes = Math.floor((difference % _hour)/_minute),
seconds = Math.floor((difference % _minute)/_second);
// fix dates so that it will show two digets
days = (String(days).length >= 2) ? days : '0' + days;
hours = (String(hours).length >= 2) ? hours : '0' + hours;
minutes = (String(minutes).length >= 2) ? minutes : '0' + minutes;
seconds = (String(seconds).length >= 2) ? seconds : '0' + seconds;
// based on the date change the refrence wording
var ref_days = (days === 1) ? 'day' : 'days',
ref_hours = (hours === 1) ? 'hour' : 'hours',
ref_minutes = (minutes === 1) ? 'minute' : 'minutes',
ref_seconds = (seconds === 1) ? 'second' : 'seconds';
// set to DOM
container.find('.days').text(days);
container.find('.hours').text(hours);
container.find('.minutes').text(minutes);
container.find('.seconds').text(seconds);
container.find('.days_ref').text(ref_days);
container.find('.hours_ref').text(ref_hours);
container.find('.minutes_ref').text(ref_minutes);
container.find('.seconds_ref').text(ref_seconds);
};
// start
interval = setInterval(countUp, 1000);
};
})(jQuery);
Wenn Sie 'clearInterval()' aufgerufen haben, dann ist der einzige Weg, es neu zu starten, 'setInterval() 'erneut aufzurufen. Alternativ können Sie das Intervall die ganze Zeit über laufen lassen, aber eine 'paused'-Variable haben: Die erste Zeile der Funktion kann 'if (paused) return;' sein, so dass die Funktion bei Pause immer noch jede Sekunde aufgerufen wird mach alles. – nnnnnn
Es gibt keine integrierte Möglichkeit, einen Timer anzuhalten, aber es gibt eine gute Antwort hier http: // stackoverflow.com/a/20745721/28278, die eine Möglichkeit bietet, sich zu "pausieren", indem man sich daran erinnert, wann ein Timer gestartet wurde, und ihn von der Zeit subtrahiert, in der er auf Pause klickt, um die verbleibende Zeit zu erhalten. Sie können dann einen neuen Timer für die verbleibende Zeit starten, wenn Sie erneut auf "Abspielen" klicken. – CodingWithSpike
@nnnnnn Ich habe versucht, das hinzuzufügen, aber als ich dann den Timer wieder aufgenommen habe, ging es weiter, wo es die ganze Zeit gezählt hatte? – SBB