Javascript-форум (https://javascript.ru/forum/)
-   Элементы интерфейса (https://javascript.ru/forum/dom-window/)
-   -   Несколько таймеров + куки (https://javascript.ru/forum/dom-window/59812-neskolko-tajjmerov-kuki.html)

Tatyana83 28.11.2015 07:13

Несколько таймеров + куки
 
Помогите присоединить к данному счетчику куки, так чтобы счетчик не сбрасывал значения, в то время когда закрыта страница (и продолжал считать). То есть посетитель заходит на сайт нажимает на кнопку, пошел отсчёт, к примеру на 60 минут. Закрывает страницу, возвращается через 30 минут и счетчик показывает "Ждать 30m".На странице несколько таких счётчиков.
<input id="Bit1" value="Счётчик" onclick="Bit1()">

<script>
var W;
function Bit1 ()
{
var o = document.getElementById ('Bit1');
o.disabled = 70; o.value = 'Ждать 60m.';
W = window.open ('#','hero');
myTimer ();
function myTimer ()
   {
   var W = o.value.split ('Ждать ') [1],
       t = 60 * parseInt (W) - 1 + ((W.indexOf ('m. ') != -1) ? parseInt (W.split ('m. ') [1]) : 0),
       m = Math.floor (t / 60);
       s = t % 60;
   if (t) {o.value = 'Ждать ' + m + 'm.' + (s ? (' ' + s + 's.') : ''); setTimeout (myTimer, 1000)}
   else {o.value = 'Счётчик'; o.disabled = 0; if (!W.closed) W.close ()}
   }
}
</script>

Sigizmund2012 02.12.2015 11:17

Сделал через localStorage, но работает не очень:
<input id="Bit1" value="Счётчик" onclick="Bit( this )">
<input id="Bit2" value="Счётчик" onclick="Bit( this )">
<input id="Bit3" value="Счётчик" onclick="Bit( this )">
<script>
		var W;

		function initializeStorage() {
			if ( typeof(Storage) !== undefined ) {
				if ( !localStorage.timersArr ) {
					var timersArr = [];
					localStorage.timersArr = JSON.stringify( timersArr );
				}
			} else {
				alert( 'Браузер не поддерживает локальные хранилища!' );
			}
		}

		initializeStorage();

		if ( localStorage.timersArr ) {
			var timersArr = JSON.parse( localStorage.timersArr );
			var currentTime = new Date();
			for ( var i = 0; i < timersArr.length; i++ ) {
				var timeStart = new Date( parseInt( localStorage[timersArr[i]] ) );
				var difference = currentTime - timeStart;
				var m = 60 - Math.floor( ( difference / 1000 ) / 60 );
				var s = 60 - Math.floor( ( difference / 1000 ) ) % 60;
				var elem = document.getElementById( timersArr[i] );
				elem.value = 'Ждать ' + m + 'm.' + ( s ? s + 's.' : '' );
				myTimer( elem );
			}
		}

		function Bit( elem ) {
			var o = elem,
				id = elem.id,
				timersArr = JSON.parse( localStorage.timersArr );
			if ( timersArr.indexOf( id ) === -1 ) {
				timersArr.push( id );
			}
			localStorage.timersArr = JSON.stringify( timersArr );
			localStorage[id] = new Date().getTime();
			o.disabled = 70;
			o.value = 'Ждать 60m.';
			W = window.open ( '#', 'hero' );
			myTimer( o );
		}

		function myTimer( o ) {
			var W = o.value.split ( 'Ждать ' ) [1],
				t = 60 * parseInt( W ) - 1 + ((W.indexOf ( 'm. ' ) != -1) ? parseInt( W.split ( 'm. ' ) [1] ) : 0),
				m = Math.floor ( t / 60 ),
				s = t % 60,
				timersArr = JSON.parse( localStorage.timersArr );
			if ( t ) {
				o.value = 'Ждать ' + m + 'm.' + (s ? (' ' + s + 's.') : '');
				setTimeout( myTimer, 1000, o );
			}
			else {
				o.value = 'Счётчик';
				o.disabled = 0;
				localStorage.removeItem( o.id );
				timersArr.splice( timersArr.indexOf( o.id ), 1 );
				localStorage.timersArr = JSON.stringify( timersArr );
				if ( !W.closed ) W.close ()
			}
		}
</script>


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