Witam!
Chciał bym zrobić stoper offline przy użyciu jQuery z dokładnością do milisekund.
i oczywiście, zbyt fajnie by było gdyby było wszystko ok. Pojawia się opóźnienie... dlaczego?
(function($){
$.fn.stopWatch = function(settings) {
var config = {
'hour': 0,
'minute': 0,
'second': 0,
'mili': 0,
'setInterval': false
};
if(settings)
{
$.extend(config,settings);
}
return this.each(function()
{
var timer = $(
'<div id="stopwatch-timer">'
+ '<span id="stopwatch-h">00</span>'
+ '<span>:</span>'
+ '<span id="stopwatch-m">00</span>'
+ '<span>:</span>'
+ '<span id="stopwatch-s">00</span>'
+ '<span>:</span>'
+ '<span id="stopwatch-mili">000</span>'
+ '</div>');
var controls = $(
'<div id="stopwatch-controls">'
+ '<button id="start"><i></i> start</button>'
+ '<button id="stop" ><i></i> stop</button>'
+ '<button id="reset"><i></i> reset</button>'
+ '</div>');
$(this).append(timer, controls);
var stopWatch = function()
{
if(config.mili < 999)
{
config.mili++;
if(config.mili < 10)
{
$('#stopwatch-mili').html('00'+config.mili);
}
else
if(config.mili >= 10 && config.mili<100)
{
$('#stopwatch-mili').html('0'+config.mili);
}
else
{
$('#stopwatch-mili').html(config.mili);
}
}
else if(config.mili == 999)
{
config.mili = '000';
$('#stopwatch-mili').html(config.mili);
if(config.second <59)
{
config.second++;
if (config.second < 10)
{
$('#stopwatch-s').html('0' + config.second);
}
else
{
$('#stopwatch-s').html(config.second);
}
}
else if (config.second == 59)
{
config.second = '00';
$('#stopwatch-s').html(config.second);
if (config.minute < 59)
{
config.minute++;
if (config.minute < 10)
{
$('#stopwatch-m').html('0' + config.minute);
}
else
{
$('#stopwatch-m').html(config.minute);
}
}
else if (config.minute == 59)
{
config.minute = "00";
$('#stopwatch-m').html(config.minute);
if (config.hour < 24)
{
config.hour++;
if (config.hour < 10)
{
$('#stopwatch-h').html('0' + config.hour);
}
else
{
$('#stopwatch-h').html(config.hour);
}
}
else if (config.hour == 24)
{
config.hour = "00";
$('#stopwatch-h').html(config.hour);
}
}
}
}
}//end stopwatch
$('#start').bind(
{
click: function()
{
config.setInterval = self.setInterval
(
function(){stopWatch()},1
);
$('#start').attr("disabled","disabled");
}
});
// click on stop
$('#stop').bind({
click: function() {
config.setInterval = window.clearInterval(config.setInterval);
$('#start').removeAttr("disabled");
}
});
// click on reset
$('#reset').bind({
click: function() {
config.hour = 0;
$('#stopwatch-h').html('00');
config.minute = 0;
$('#stopwatch-m').html('00');
config.second = 0;
$('#stopwatch-s').html('00');
config.mili = 0;
$('#stopwatch-mili').html('000');
}
});
});
};
})(jQuery);
Z góry dziękuje za pomoc i rady.
Pozdrawiam.