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

denisich84 10.02.2012 16:13

Таймер обратного отсчета времени с кнопками
 
Перерыв инет ни чего подходящего не нашел:cray: Случайно наткнулся на этот сайт и вроде люди тут толковые:thanks:
Прошу помочь с проблемкой. Нашел на этом форуме скрипт таймера:
Код:

<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=windows-1251">
<title>Div HTML</title>
</head>
<body>
<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>
                <script type="text/javascript">
  var T = {
    n: null,
    s: new Date,
    f: 1,
    t: new Date,
    Timer: function () {
        T.t = new Date(T.t.getTime() + T.f * ((new Date).getTime() - T.s.getTime()));
        document.getElementsByTagName("div")[0].innerHTML = T.t.toLocaleTimeString();
        T.s = new Date;
        T.n = setTimeout(function () {
            T.Timer()
        }, 500)
    },
    New_start: function () {
        clearTimeout(T.n);
        T.t.setHours(0, 0, 0, 0);
        T.s = new Date;
        T.Timer()
    },
    Pause: function () {
        T.s ? (clearTimeout(T.n), T.s = "") : (T.s = new Date, T.Timer())
    },
    BackTimer: function () {
        clearTimeout(T.n);
        T.f = -T.f;
        T.s = new Date;
        T.Timer()
    },
    Set: function () {
        var a = parseInt(document.getElementById("sec").value, 10) || 0;
        T.t.setHours(0, 0, a, 0);
        document.getElementsByTagName("div")[0].innerHTML = T.t.toLocaleTimeString()
    }
};
                </script>
        </head>
        <body>
                <input type="button" onclick="T['New_start']()" value="Start/New">
                <input type="button" onclick="T['Pause']()" value="Pause/Go">
        <input type="button" onclick="T['BackTimer']();" value="BackTimer">
        <input type="button" onclick="T['Set']();" value="Set">
        <label><input type="text" value="30" id="sec">sec</label>
        <div>Div HTML</div>
    </body>
</html>

С куками работать я не умею! Как сделать чтобы таймер не сбрасывался при обновлении страницы и при закрытии браузера, а продолжал отсчитывать время??? И на одной странице можно было расположить несколько таймеров?

И чтобы дату отсчета можно было вводить со страницы например как в этом скрипте:

Код:

<html>

<head>
<meta http-equiv="Content-Type" content="text/html; charset=windows-1251">
<title>Часы</title>
</head>

<body>
<div align="center">
<p>&nbsp;<span id="clock1" style="width:450px; font-size:10px"></span>&nbsp;</p>
</div>

<script type="text/javascript">
<!--
 var hour0=0;
 var min0=0;
 var sec0=0;
 var timeId=null;
 
 function form2 (v) { return (v<10?'0'+v:v); }
 
 function changetime() {
  sec0--;
  if (sec0<0) {
  sec0=59;
  min0--;
  if (min0<0) {
    min0=59;
    if (hour0>0) hour0--;
    else { hour0=min0=sec0=0; }
  }
  }
 }
 
function showtime () {
  var t=hour0*3600+min0*60+sec0;
  if (t>0) {
  document.getElementById('clock1').innerHTML = form2(hour0)+':'+form2(min0)+':'+form2(sec0);
  changetime();
  }
  else if (t<1) {
  document.getElementById('clock1').innerHTML = '';
  window.clearTimeout (timeId);
  timeId=null;
  }
 }
 
 function inittime (hour,min,sec) {
  if (timeId) {
  window.clearTimeout (timeId);
  timeId=null;
  }
  hour0=Math.max(hour,0); min0=Math.max(min,0); sec0=Math.max(sec,0);
  if (!timeId) {
  timeId=window.setInterval("showtime();",1000);
  }
 }
// -->
</script>

<script type="text/javascript">
 function generate_list (name,min,step,max,deft) {
  document.writeln ('<select name="'+name+'" size="1">');
  for (var i=min; i<=max; i+=step) {
  document.write ('<option value="'+i+'"');
  if (i==deft) { document.write (' selected'); }
  document.writeln ('>'+(i<10?'0'+i:i)+'</option>');
  }
  document.writeln ('</select>');
 }
</script>
 
<div align="center">
 <form name="f1">
  <table align="center" width="90%" border="0" cellpadding="4" cellspacing="0"><tr>
  <td>Часы:&nbsp;<script type="text/javascript">generate_list ('hour0',0,1,50,1);</script></td>
  <td>Минуты:&nbsp;<script type="text/javascript">generate_list ('min0',0,1,59,0);</script></td>
  <td>Секунды:&nbsp;<script type="text/javascript">generate_list ('sec0',0,1,59,0);</script></td>
  <td><input type="button" value="Отсчёт"
    onclick="inittime(
    document.f1.hour0.options[document.f1.hour0.selectedIndex].value,
    document.f1.min0.options[document.f1.min0.selectedIndex].value,
    document.f1.sec0.options[document.f1.sec0.selectedIndex].value);"></td>
  </tr></table>
 </form>
</div>
</body>
</html>


function 10.02.2012 17:31

Цитата:

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

Стать Господом-Богом.

function 10.02.2012 17:36

Хотя можно изловчиться и с помощью cookie и проверки времени (Date), прошедшего с преведущего посещения страницы.

denisich84 10.02.2012 17:45

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

function 10.02.2012 17:51

Цитата:

Сообщение от function
Хотя можно изловчиться

А вообще:

click

denisich84 10.02.2012 18:03

Цитата:

Сообщение от function
А вообще:

click

Я же тебя не учу своей профессии! Зачем ты мне навязываешь свою? Для кого то скрипт написать как семечки по щелкать, а для кого то лес дремучий!

function 10.02.2012 19:04

Цитата:

Сообщение от denisich84
Я же тебя не учу своей профессии! Зачем ты мне навязываешь свою?

Потому что, я не намерен весь вечер заниматься чужим скриптом за бесплатно.

denisich84 10.02.2012 19:08

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

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

denisich84, мне кажется ты ему нагрубил и после этого он и 2 строчки писать не будет, сколько бы ты смайликов не поставил.

denisich84 10.02.2012 19:19

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

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
при закрытом браузере таймер продолжал отсчитывать время

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

denisich84 12.02.2012 16:42

да! я смотрел. Мне нужно чтобы можно было вводить со страницы дату до которой нужно отсчитывать а не прописывать в коде эту дату.

monolithed 12.02.2012 17:08

Цитата:

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

Однозначно бесплатно это делать никто не будет ;)

denisich84 12.02.2012 17:10

Сколько? Пиши в почту.

monolithed 12.02.2012 17:39

Цитата:

Сообщение от denisich84
Сколько? Пиши в почту.

На форуме есть раздел работа

Mахmахmахimus 12.02.2012 18:17

100 рублей wmr сделаю за пол часа - час
livanderiamarum@gmail.com

function 15.02.2012 09:43

Цитата:

Сообщение от Mахmахmахimus
livanderiamarum@gmail.com

Так ты всё же марум!

GuardCat 15.02.2012 10:54

Цитата:

Сообщение от function
Так ты всё же марум!

форум всё больше напоминает индийский фильм, самый конец, когда незнакомые друг другу родственники узнают друг друга. Но, что касается Mахmахmахimus, он и не скрывал вроде.

Mахmахmахimus 15.02.2012 16:09

Цитата:

Сообщение от function
Так ты всё же марум!


function 15.02.2012 21:04

Цитата:

Сообщение от GuardCat
он и не скрывал вроде.

Я последнее время форум не читал, но сначала точно отмалчивался.

Deimos 20.01.2015 13:31

Цитата:

Сообщение от denisich84 (Сообщение 156582)
Я же тебя не учу своей профессии! Зачем ты мне навязываешь свою? Для кого то скрипт написать как семечки по щелкать, а для кого то лес дремучий!

А никто в вашу профессию и не лезет.
Вы или учите яваскрипты или платите деньги за их написание.

cyber 20.01.2015 13:41

Лол, ответ 3 года спустя :D

Deimos 20.01.2015 17:48

Я свежезарегистрированный и три года назад не читал эту тему.
К тому, же это не запрещено правилами.


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