Написал часики для обратного отсчета. Подскажите где слажал
$(document).ready(function(){ // по завершению загрузки страницы getTimer(); function getTimer(){ var day =$("span#day").text(); var sec =$("span#sec").text(); var minu =$("span#min").text(); var hour =$("span#hour").text(); if(day == 0 && hour == 0 && minu == 0 && (sec == 0 || sec == 1)) sec = 0; else sec--; if(sec == 0 ){ if(day == 0 && hour == 0 && (minu == 0 || minu == 1)){ minu=0; sec = 0; } else{ minu -- ; sec = 60 } } if(minu == 0){ if(day == 0 && hour == 0){ hour = 0 ; minu =0; } else{ hour --; minu = 60; } } if(hour == 0){ if(day != 0){ day --; hour = 23; } } if(day == 0) { day = 0; if(hour == 0){ hour =0; if(minu==0) { minu =0; if(sec ==0){ sec =0; } } } } $("span#day").text(day); $("span#sec").text(sec); $("span#min").text(minu); $("span#hour").text(hour); setTimeout(getTimer, 1000); } }); </script> не нравиться мне что 60 у меня вылетает при работе а не 59, а догнать по логике не могу. Мне кажется ваще код превратился в фарш:( и много лишнего. но я путаться начал жутко. Посоветуйте как оптимизироватью |
Цитата:
|
Цитата:
Формулируйте алгоритм словесно, графически, добейтесь ясности и лаконичности, а потом реализуйте в коде. оффтопом. Интересно, а блок-схемы сейчас кто-нибудь помнит? Пишут алгоритмы на бумажке или сразу -- в лапшу? |
Цитата:
Посему изначально приходится действовать по принципу Keep It Stupid... if(day == 0) { day = 0; Если day равно 0, то day равно 0... |
Цитата:
Эту задачу можно решить двумя способами. Подсказка 1: Видимо автор желает, чтобы таймер работал так (часы-минуты-секунды): 01:01:01 01:01:00 01:00:59 ... 01:00:02 01:00:01 01:00:00 00:59:59 Посмотрите на пример и найдите закономерность. Подсказка 2: Сколько секунд в днях-часах-минутах? Как можно отнять одну секунду из дней-часов-минут-секунд? |
Продумать алгоритм?
Пройдитесь пожалуйста в соседнюю темку "Вывод значения onclick", разве там проблема в алгоритме? |
Спасибо за советы
Оцените новый вариант. Ничего умнее не придумал как вставить стоп сигналы в иф. <script type="text/javascript"> $(document).ready(function(){ // по завершению загрузки страницы getTimer(); function getTimer(){ var day =$("span#day").html(); var sec =$("span#sec").html(); var minu =$("span#min").html(); var hour =$("span#hour").html(); var sh=1, sd =1, sm=1, ss =1; if(day == 0) sd =0; if(day == 0 && hour == 0) sh =0; if(sh == 0 && minu ==0) sm = 0; if(sm == 0 && sec == 0) ss = 0; if(ss != 0){ sec--; if(sec == 0 && sm == 1){ sec=59; minu --; if(minu == 0 && sh == 1){ minu =59; hour--; if(hour == 0 && sd == 1){ hour=23; day--; } } } } $("span#day").text(day); $("span#sec").text(sec); $("span#min").text(minu); $("span#hour").text(hour); setTimeout(getTimer, 1000); } }); </script> |
После тега "[ js]" пиши run = "[ js run]" так удобнее смотреть, имхо.
Но тогда нужно и html теги к которым ты обращаешься, писать... Я конечно не гуру, но зачем каждую миллисекунду обновлять? setTimeout(getTimer, 1); |
а это для теста ) извиняюсь, забыл сменить.
|
Ойтыжхоспади... Сложить все, вычесть единицу и снова расложить по отдельным элементам не можете...
А в начальной школе вычитанию столбиком учились? Или пропустили? Иэээх... Думать совсем разучились. Догадаетесь куда и вместо чего это вставить? ... // все - отчет закончен, выходим и больше ничего не делаем if ( s == 0 && m == 0 && h == 0 && d == 0 ) { return; } // вычитаем одну секунду s--; // когда все секунды кончились занимаем у минут if ( s < 0 ) { s = 59; m--; } // когда и минуты кончились - занимаем у часов if ( m < 0 ) { m = 59; h--; } // а потом у дней if ( h < 0 ) { h = 23; d--; } // проверяем чтобы дни не были отрицательными if ( d < 0 ) { d = 0; } |
Часовой пояс GMT +3, время: 13:20. |