Javascript.RU

Создать новую тему Ответ
 
Опции темы Искать в теме
  #1 (permalink)  
Старый 04.06.2014, 22:25
Новичок на форуме
Отправить личное сообщение для DerGogunio Посмотреть профиль Найти все сообщения от DerGogunio
 
Регистрация: 03.06.2014
Сообщений: 4

Countdown и Кукис
Доброго времени суток.

Скажу сразу в JS я не силен, поэтому появилась необходимость вашей помощи.
Для знатоков, я думаю, задача не представит сложностей.
За чистоту кода сильно не ругайте, попытался написать как смог.

Есть countdown-таймер JS на 15 сек., который запускается по клику (переход по внешней ссылке).
Все работает, но вот только при обновлении страницы таймер сбрасывается на исходное значение.

В связи с этим вопрос:
Каким образом заставить счетчик продолжать свою работу заданное время при обновлении страницы?

Читал учебник по кукам (http://learn.javascript.ru/cookie), но так и не понял, как привязать их к данному таймеру.

Код JS:
function eHide(sec){
    var time    = sec;
	var hour    = parseInt(time / 3600);
    if ( hour < 1 ) hour = 0;
    time = parseInt(time - hour * 3600);
    if ( hour < 10 ) hour = '0'+hour; 
    var minutes = parseInt(time / 60);
    if ( minutes < 1 ) minutes = 0;
    time = parseInt(time - minutes * 60);
    if ( minutes < 10 ) minutes = '0'+minutes; 
    var seconds = time;
    if ( seconds < 10 ) seconds = '0'+seconds;
	
	document.getElementById("title").innerHTML = 'Wait ' +hour+':'+minutes+':'+seconds;
	sec--;
	    if(sec>0)  {
        window.setTimeout(function(){ eHide(sec);}, 1000);
		enabled = false;
		
    }  else { 
        document.getElementById("title").innerHTML = 'The End!';
    }
}


Код HTML:
<div id="title">Start</div>
<a  id="waiting" href="http://ya.ru/" target="_blank" onclick="eHide (15); ">Click</a>
Ответить с цитированием
  #2 (permalink)  
Старый 05.06.2014, 08:46
Профессор
Отправить личное сообщение для jsnb Посмотреть профиль Найти все сообщения от jsnb
 
Регистрация: 15.03.2014
Сообщений: 561

Для такого лучше не куки, а localstorage юзать:
<!DOCTYPE HTML>
<html>
  <head>
  <meta charset="utf-8">
  </head>
  <body>
<div id="title">Start</div>
<a id="waiting" href="http://ya.ru/" target="_blank" onclick="eHide(15, true);">Click</a>

<script>
function eHide(sec, checkLocalStorage) {
  if (checkLocalStorage && localStorage.getItem('eHideSec')) {
    var savedSec = localStorage.getItem('eHideSec');
    if (savedSec > 0) sec = savedSec;
  }
  var time = sec;
  var hour = parseInt(time / 3600);
  if (hour < 1) hour = 0;
  time = parseInt(time - hour * 3600);
  if (hour < 10) hour = '0' + hour;
  var minutes = parseInt(time / 60);
  if (minutes < 1) minutes = 0;
  time = parseInt(time - minutes * 60);
  if (minutes < 10) minutes = '0' + minutes;
  var seconds = time;
  if (seconds < 10) seconds = '0' + seconds;

  document.getElementById("title").innerHTML = 'Wait ' + hour + ':' + minutes + ':' + seconds;
  localStorage.setItem('eHideSec', sec);
  sec--;

  if (sec >= 0) {
    window.setTimeout(function () {
      eHide(sec);
    }, 1000);
    enabled = false;
  } else {
    document.getElementById("title").innerHTML = 'The End!';
  }
}
</script>

  </body>
</html>
Ответить с цитированием
  #3 (permalink)  
Старый 05.06.2014, 11:09
Новичок на форуме
Отправить личное сообщение для DerGogunio Посмотреть профиль Найти все сообщения от DerGogunio
 
Регистрация: 03.06.2014
Сообщений: 4

Спасибо за отклик.

Исчезла проблема повторного запуска таймера при многочисленных кликах по ссылке. Благодарю за подсказку.

Но проблема сброса таймера при полном обновлении страницы (F5) осталась.
Попробовал добавить запрет повторного перехода по ссылке, но, если обновить страницу, таймер становится в исходное положение.
Каким образом заставить таймер считать указанное время даже если страница полностью обновлена?

Вот код с запретом на повторный переход по ссылке:
<!DOCTYPE HTML>
<html>
  <head>
  <meta charset="utf-8">
  <script type="text/javascript" src="http://code.jquery.com/jquery-latest.js"></script>
  </head>
  <body>
<div id="title">Start</div>
<a id="waiting" href="http://ya.ru/" target="_blank" onclick="eHide(15, true);" load="1">Click</a>

<script>
function eHide(sec, checkLocalStorage) {
  if (checkLocalStorage && localStorage.getItem('eHideSec')) {
    var savedSec = localStorage.getItem('eHideSec');
    if (savedSec > 0) sec = savedSec;
  }
  var time = sec;
  var hour = parseInt(time / 3600);
  if (hour < 1) hour = 0;
  time = parseInt(time - hour * 3600);
  if (hour < 10) hour = '0' + hour;
  var minutes = parseInt(time / 60);
  if (minutes < 1) minutes = 0;
  time = parseInt(time - minutes * 60);
  if (minutes < 10) minutes = '0' + minutes;
  var seconds = time;
  if (seconds < 10) seconds = '0' + seconds;

  document.getElementById("title").innerHTML = 'Wait ' + hour + ':' + minutes + ':' + seconds;
  localStorage.setItem('eHideSec', sec);
  sec--;

  if (sec >= 0) {
    window.setTimeout(function () {
      eHide(sec);
    }, 1000);
    enabled = false;
  } else {
    document.getElementById("title").innerHTML = 'The End!';
  }
}
  $("#waiting").on("click", function() {
    if($(this).attr("load") == 1) {        
       $(this).attr("load", "0");
    }
    else {
        return false;
    }
});
</script>

  </body>
</html>
Ответить с цитированием
  #4 (permalink)  
Старый 05.06.2014, 13:11
Профессор
Отправить личное сообщение для jsnb Посмотреть профиль Найти все сообщения от jsnb
 
Регистрация: 15.03.2014
Сообщений: 561

<!DOCTYPE HTML>
<html>
  <head>
  <meta charset="utf-8">
  <script type="text/javascript" src="http://code.jquery.com/jquery-latest.js"></script>
  </head>
  <body>
<div id="title">Start</div>
<a id="waiting" href="http://ya.ru/" target="_blank" data-load="1">Click</a>

<script>
function eHide(sec, checkLocalStorage) {
  if (checkLocalStorage && localStorage.getItem('eHideSec')) {
    var savedSec = localStorage.getItem('eHideSec');
    if (savedSec > 0) sec = savedSec;
  }
  var time = sec;
  var hour = parseInt(time / 3600);
  if (hour < 1) hour = 0;
  time = parseInt(time - hour * 3600);
  if (hour < 10) hour = '0' + hour;
  var minutes = parseInt(time / 60);
  if (minutes < 1) minutes = 0;
  time = parseInt(time - minutes * 60);
  if (minutes < 10) minutes = '0' + minutes;
  var seconds = time;
  if (seconds < 10) seconds = '0' + seconds;

  document.getElementById("title").innerHTML = 'Wait ' + hour + ':' + minutes + ':' + seconds;
  localStorage.setItem('eHideSec', sec);
  sec--;

  if (sec >= 0) {
    window.setTimeout(function () {
      eHide(sec);
    }, 1000);
    enabled = false;
  } else {
    document.getElementById("title").innerHTML = 'The End!';
	$("#waiting").attr("data-load", '1');
  }
}

if (localStorage.getItem('eHideSec') && localStorage.getItem('eHideSec') > 0) {
  $("#waiting").attr("data-load", '0');
  eHide(15, true);
}

$("#waiting").on("click", function () {
  if ($(this).attr("data-load") == 1) {
    $(this).attr("data-load", '0');
    eHide(15, true);
  } else {
      alert('forbidden')
      return false;
    }
});
</script>

  </body>
</html>
Ответить с цитированием
  #5 (permalink)  
Старый 05.06.2014, 13:35
Новичок на форуме
Отправить личное сообщение для DerGogunio Посмотреть профиль Найти все сообщения от DerGogunio
 
Регистрация: 03.06.2014
Сообщений: 4

Вот это да...
jsnb, снимаю шляпу перед Вашим профессионализмом.

Написанный Вами итоговый код выполняет все свои функции.
Огромное Вам спасибо.
Ответить с цитированием
Ответ



Опции темы Искать в теме
Искать в теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Записать свойства блока в кукис dolte Events/DOM/Window 6 18.12.2013 13:17
поиск countdown timer dikucher jQuery 3 12.09.2013 17:22
Проблема с wt Countdown. Он тупит или я? BaRoN_Pro Элементы интерфейса 6 11.07.2013 13:09
неставит кукис? igor331011 jQuery 4 28.03.2013 17:26
Checkbox, атрибут тега и кукис Pavov Общие вопросы Javascript 4 09.12.2010 16:52