Javascript-форум (https://javascript.ru/forum/)
-   Общие вопросы Javascript (https://javascript.ru/forum/misc/)
-   -   Таймер обратного отсчета времени с кнопками (https://javascript.ru/forum/misc/25618-tajjmer-obratnogo-otscheta-vremeni-s-knopkami.html)

monolithed 10.02.2012 19:39

Цитата:

Сообщение от denisich84
Можно же как то запомнить время когда был включен таймер? и отсчитывать от этого времени то время которое нам надо!

Частично можно, но так никто не делает.
Одно из возможных решений: мониторить события window.onunload, window.onoffline, window.onhashchange, window.onpagehide, window.onbeforeunload и сохранять периодически значение в куки, потом идентифицировать пользователя по сессии и IP, но после смены IP (для динамического адреса достаточно перезагрузки ПК) определить пользователя не получится. По крайней мере в тех случаях если не использовалось API браузера.

Цитата:

Сообщение от denisich84
там надо две строчки дописать все уже написано)))

Желаю удачи

Mахmахmахimus 10.02.2012 19:54

Цитата:

Сообщение от denisich84
пускай не умничает умник! будто я без него не знаю где справочники искать!

я бы тоже пришел к такому выводу, что ты либо не знаешь либо искал но не нашел, либо нуб, потому что если бы человек хотел чтобы за него написали скрипт тогда он бы попросил бы так "слушай,гуглить вломы, скажи какие команлы писать а, братюнь!"

суть в том что я 5 лет изучаю js, и я тратил на это время, мне бы не хотелось делиться своим трудом с незнакомцами просто так, ДАЖЕ за большое пожалуйста. Ты принял попытку, мыл кому надо тот поделится и поможет мне, ну так вот тебе человек и помог, спасибо должен говорить, он ссылку тебе нашел где почитать, или ты хотел чтобы он оттуда скопипастил текст сюда? Тогда бы тебе легче было? совсем обнаглел что ли? уже по ссылкам кликать вломы?! я думаю вряд ли тебе тут кто-то будет помогать еще после такого отношения. тут тебе не техподдержка javascript! тут люди которые общаются на форуме, и иногда от скуки заходят в этот раздел чтобы помогать новичкам понять непонятое ими из учебников. или помочь найти решение или ошибку.

denisich84 10.02.2012 20:04

Ты начало темы то почитай, что там написано? Повторить? Что я много где был и ничего не нашел подходящего, вот нашел два скрипта боле менее нормальных и попросил их связать. Зачем мне из за двух строк горы лопатить, иногда проще чтобы объяснили и подсказали чем энциклопедии читать и не понимать о чем речь. Я нормально попросил, и сопли я тут разводить не собираюсь!

P.S. Если бы я пришел и написал: "напишите мне таймер такой то и такой мне в лом искать " другой разговор.

Mахmахmахimus 10.02.2012 20:05

ок)

denisich84 11.02.2012 12:55

Вот еще не плохой скрипт но при закрытии браузера таймер сбивается:
Код:

<html>
<head>
<meta http-equiv="content-type" content="text/html; charset=windows-1251">
<style>
#set_timer, #timer, #stop_timer {display: none}
#timer {color: black}
</style>
<script>
var FINAL, TIMER;
onload = function ()
{
with (document)
  {
  _CS = getElementById ('cS'); SS_ = getElementById ('sS');
  _CM = getElementById ('cM'); SM_ = getElementById ('sM');
  _CH = getElementById ('cH'); SH_ = getElementById ('sH');
  _CD = getElementById ('cD'); SD_ = getElementById ('sD');
  }
var dC = unescape (document.cookie);
if (dC.indexOf ('type=1') < 0)
  {document.getElementById ('set_timer').style.display = 'block'; SD_.focus ()}
else
  {
  var pm = dC.split ('; ');
  for (var j = 0, lj = pm.length; j < lj; j++)
  if (pm [j].indexOf ('type=1+') == 0) {FINAL = pm [j].split ('+') [1]; break}
  var cT = parseInt (new Date ().valueOf () / 1000, 10);
  var d = FINAL - cT;
  document.getElementById ('txt').innerHTML = (d >= 0) ? 'До конца света осталось' : 'После конца света прошло';
  if (d < 0) {d *= -1; document.getElementById ('timer').style.color = 'red'}
  var s = d % 60; d -= s; d /= 60; _CS.innerHTML = s;
  var m = d % 60; d -= m; d /= 60; _CM.innerHTML = m;
  var h = d % 24; d -= h; d /= 24; _CH.innerHTML = h; _CD.innerHTML = d;
  with (document)
      {
      getElementById ('timer').style.display = 'block';
      getElementById ('stop_timer').style.display = 'inline';
      }
  TIMER = setTimeout ('FuncTimer ()', 1000);
  }
}

function FuncSetTimer ()
{
var sDv = SD_.value, sHv = SH_.value, sMv = SM_.value, sSv = SS_.value;
if (sDv.replace (/\d/g, '').length || sHv.replace (/\d/g, '').length ||
sMv.replace (/\d/g, '').length || sSv.replace (/\d/g, '').length) return;
var per = ((sDv) ? sDv : 0) * 24 * 60 * 60 + ((sHv) ? sHv : 0) * 60 * 60 +
          ((sMv) ? sMv : 0) * 60          + ((sSv) ? sSv : 0) * 1;
var cT = new Date ().getTime ();
FINAL = per + parseInt (cT / 1000, 10);
document.cookie = escape ('type=1+' + FINAL + '; expires=' + (cT + 180 * 24 * 60 * 60* 1000));
_CS.innerHTML = (sSv) ? sSv : 0; _CM.innerHTML = (sMv) ? sMv : 0;
_CH.innerHTML = (sHv) ? sHv : 0; _CD.innerHTML = (sDv) ? sDv : 0;
with (document)
  {
  getElementById ('set_timer').style.display = 'none';
  getElementById ('txt').innerHTML = 'До конца света осталось';
  getElementById ('timer').style.display = 'block';
  getElementById ('stop_timer').style.display = 'inline';
  }
TIMER = setTimeout ('FuncTimer ()', 1000);
}

function FuncTimer ()
{
var cT = parseInt (new Date ().valueOf () / 1000, 10);
var cDv = _CD.innerHTML, cHv = _CH.innerHTML, cMv = _CM.innerHTML, cSv = _CS.innerHTML;
if (cT <= FINAL)
  {
  cSv = (cSv != 0) ? --cSv : 59;
  if (cSv == 59) cMv = (cMv != 0) ? --cMv : 59;
  if (cSv == 59 && cMv == 59) cHv = (cHv != 0) ? --cHv : 23;
  if (cSv == 59 && cMv == 59 && cHv == 23 && cDv != 0) --cDv;
  }
else
  {
  document.getElementById ('txt').innerHTML = 'После конца света прошло';
  document.getElementById ('timer').style.color = 'red';
  cSv = (cSv != 59) ? ++cSv : 0;
  if (cSv == 0) cMv = (cMv != 59) ? ++cMv : 0;
  if (cSv == 0 && cMv == 0) cHv = (cHv != 23) ? ++cHv : 0;
  if (cSv == 0 && cMv == 0 && cHv == 0 && cDv) ++cDv;
  }
_CS.innerHTML = cSv; _CM.innerHTML = cMv;
_CH.innerHTML = cHv; _CD.innerHTML = cDv;
TIMER = setTimeout ('FuncTimer ()', 1000);
}

function FuncStopTimer ()
{
clearTimeout (TIMER); FINAL = 0;
SD_.value = ''; SH_.value = ''; SM_.value = ''; SS_.value = '';
with (document)
  {
  cookie = escape ('type=0+0; expires=1000');
  getElementById ('timer').style.display = 'none';
  getElementById ('timer').style.color = 'black';
  getElementById ('stop_timer').style.display = 'none';
  getElementById ('set_timer').style.display = 'block';
  }
}
</script>
</head>
<body>
<div id="set_timer">
Установите продолжительность отсчёта:
<p>дни: <input id="sD">
<p>часы: <input id="sH">
<p>минуты: <input id="sM">

<p>секунды: <input id="sS">
<p><input type="button" value="Запустить обратный отсчёт" onclick="FuncSetTimer ()">
</div>

<div id="timer">
<span id="txt"></span>: <span id="cD"></span> дн., <span id="cH"></span> час., <span id="cM"></span> мин., <span id="cS"></span> сек.
</div>

<input id="stop_timer" type="button" value="Остановить отсчёт" onclick="FuncStopTimer ()">
</body>
</html>


Mахmахmахimus 11.02.2012 15:19

оч интерсно засуну в свой проект еще есть?

denisich84 11.02.2012 21:18

Может уже мне кто нибудь поможет? и так уже 3 рабочих скрипта выложил)

рони 11.02.2012 23:35

Вариант с сохранением...
<html>
	<head>
		<meta charset="utf-8">
		<style type="text/css">
			body { background-color:#ffcc33; margin:0px; }
			div { color:#0033cc; font:bold 12pt Tahoma; margin:15px; }
		</style>

	</head>
	<body>
		<input type="button" onclick="New_start()" value="Start/New">
		<input type="button" onclick="Pause();" value="Pause/Go">
        <input type="button" onclick="BackTimer();" value="BackTimer">
        <input type="button" onclick="Set();" value="Set">
        <label><input type="text" value="30" id="sec">sec</label>
        <div>Div HTML</div>
		<script type="text/javascript">
var t = new Date,
    f = 1,
    s, n;
t.setHours(0, 0, 0, 0);
window.localStorage.getItem('f') && (f = ~~window.localStorage.getItem('f'));
window.localStorage.getItem('t') && (t = new Date(window.localStorage.getItem('t')));
document.getElementsByTagName("div")[0].innerHTML = t.toLocaleTimeString()
function Timer() {
    t = new Date(t.getTime() + f * ((new Date).getTime() - s.getTime()));
    document.getElementsByTagName("div")[0].innerHTML = t.toLocaleTimeString();
    s = new Date;
    window.localStorage.setItem('t', t);
    n = setTimeout(arguments.callee, 500)
}
function New_start() {
    window.clearTimeout(n);
    t.setHours(0, 0, 0, 0);
    s = new Date;
    Timer()
}
function Pause() {
    s ? (window.clearTimeout(n), s = !1) : (s = new Date, Timer())
}
function BackTimer() {
    window.clearTimeout(n);
    f = -f;
    window.localStorage.setItem('f', f);
    s = new Date;
    Timer()
}
function Set() {
    var a = parseInt(document.getElementById("sec").value, 10) || 0;
    t.setHours(0, 0, a, 0);
    document.getElementsByTagName("div")[0].innerHTML = t.toLocaleTimeString()
};
Pause()
		</script>
    </body>
</html>

denisich84 12.02.2012 10:12

Это конечно все хорошо:thanks: . Мы запустили таймер закрыли браузер открываем например эту страницу через час и таймер начинает идти с того времени с которого мы закрыли браузер, можно сделать чтобы то время которое браузер был закрыт тоже учитывалось? т.е. при закрытом браузере таймер продолжал отсчитывать время.

рони 12.02.2012 15:41

Цитата:

Сообщение от denisich84
при закрытом браузере таймер продолжал отсчитывать время

Вам похоже нужен обычный таймер, который показывает время до определённой даты таких полно в инете да и здесь на форуме.Попробуйте поискать или обратитесь в раздел Работа


Часовой пояс GMT +3, время: 10:48.