Несколько таймеров + куки
Помогите присоединить к данному счетчику куки, так чтобы счетчик не сбрасывал значения, в то время когда закрыта страница (и продолжал считать). То есть посетитель заходит на сайт нажимает на кнопку, пошел отсчёт, к примеру на 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> |
Сделал через 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. |