Форум: Форум PHPФорум ApacheФорум Регулярные ВыраженияФорум MySQLHTML+CSS+JavaScriptФорум FlashРазное
Новые темы: 0000000
Социальная инженерия и социальные хакеры. Авторы: Кузнецов М.В., Симдянов И.В. MySQL на примерах. Авторы: Кузнецов М.В., Симдянов И.В. PHP на примерах (2 издание). Авторы: Кузнецов М.В., Симдянов И.В. Программирование. Ступени успешной карьеры. Авторы: Кузнецов М.В., Симдянов И.В. PHP 5/6. В подлиннике. Авторы: Кузнецов М.В., Симдянов И.В.
ВСЕ НАШИ КНИГИ
Консультационный центр SoftTime

HTML+CSS+JavaScript

Выбрать другой форум

 

Здравствуйте, Посетитель!

вид форума:
Линейный форум Структурный форум

тема: Таймер обратного отсчёта
 
 автор: pautina   (12.01.2015 в 19:42)   письмо автору
 
 

Здравствуйте Уважаемое сообщество.
Ни поможете собрать код для таймера обратного отсчёта
За основу использую статью http://rgbcolors.ru/prostoj-tajmer-na-javascript/
Где ошибка в коде ни подскажете

<!doctype html>
<html>
<head>
<meta charset="utf-8">
<title>Документ без названия</title>
</head>

<script>
function simple_timer(sec, block, direction) {
    var time    = sec;
    direction   = direction || false;
             
    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;
 
    block.innerHTML = hour+':'+minutes+':'+seconds;
 
    if ( direction ) {
        sec++;
 
        setTimeout(function(){ simple_timer(sec, block, direction); }, 1000);
    } else {
        sec--;
 
        if ( sec > 0 ) {
            setTimeout(function(){ simple_timer(sec, block, direction); }, 1000);
        } else {
            alert('Время вышло!');
        }
    }
</script>


<body>
                            
                            <div id="sample_countdown">00:05:00</div>
<input type="button" value="Начать отсчёт" onclick="start_countdown()" />
                            
</body>
</html>


В чём ошибка в коде для всей страницы html

  Ответить  
 
 автор: confirm   (12.01.2015 в 23:54)   письмо автору
 
   для: pautina   (12.01.2015 в 19:42)
 

Во-первых - корректное написание !DOCTYPE html.
Во-вторых - не закрыто тело функции - нет фигурной скобки, должно быть:

   //.....     
        if ( sec > 0 ) { 
            setTimeout(function(){ simple_timer(sec, block, direction); }, 1000); 
        } else { 
            alert('Время вышло!'); 
        } 
    }
} //эта скобка отсутствует


В третьих - щелчок по кнопке вызывает функцию start_countdown, причем без аргументов, а функция вами показанная называется simple_timer и имеет аргументы.

Если вызываемая функция есть, но не представлена, то это странное действие с вашей стороны, задавая вопрос выставлять половину беды.

  Ответить  
 
 автор: pautina   (13.01.2015 в 13:07)   письмо автору
 
   для: confirm   (12.01.2015 в 23:54)
 

Спасибо, изменил код

<!doctype html>
<html>

<head>
<meta charset="utf-8">
<title>Документ без названия</title>
</head>

<script>
function start_timer() { 
var block = document.getElementById('sample_timer'); 
simple_timer(0, block, true); } 
function start_countdown() { 
var block = document.getElementById('sample_countdown'); 
simple_timer(120, block); } 
function simple_timer(sec, block, direction) { 
var time = sec; direction = direction || false; 
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; block.innerHTML = hour+':'+minutes+':'+seconds; if ( direction ) { sec++; setTimeout(function(){ simple_timer(sec, block, direction); }, 1000); } else { sec--; if ( sec > 0 ) { setTimeout(function(){ simple_timer(sec, block, direction); }, 1000); } else { alert('Время вышло!'); } } } 

</script> 


<body>

                            
                            <div class="timer_sample">
<div id="sample_countdown">00:02:00</div>
<input type="button" value="Начать отсчёт" onclick="start_countdown()" />
</div>

                
    <!-- .entry-content -->
                            
</body>
</html>

А каким образом можно изменить код скрипта, чтоб можно было видеть милисекунды

  Ответить  
 
 автор: confirm   (13.01.2015 в 13:19)   письмо автору
 
   для: pautina   (13.01.2015 в 13:07)
 

А зачем они вам, чтобы у пользователя перед глазами мелькало непонятное?

onclick="start_countdown()" и function start_timer() - это как понять?

Писать конструкции тела условия, функции в одну строку как у вас, это 99% допустить ошибку.
Форматируйте код так, чтобы его легко было читать, а уж отладив его можно и сюда - сжать его в одну строку, выбросив все лишнее.

//code
else {
    expression;
    expression;
    expression //последнее выражение конструкции можно не закрывать точкой с запятой, это сокращает размер загружаемый пользователю  
}

  Ответить  
 
 автор: pautina   (13.01.2015 в 14:31)   письмо автору
 
   для: confirm   (13.01.2015 в 13:19)
 

Да спасибо, милисекунды не нужны, скажите а есть способ изменить расстояние между минутами и секундами (ну разделитель)
letter-spacing:0px; word-spacing:0px; white-space:0px;
расстояние между символами сработало, но мне бы не просто между символами а между мини и сек

  Ответить  
 
 автор: confirm   (13.01.2015 в 14:35)   письмо автору
 
   для: pautina   (13.01.2015 в 14:31)
 

А вы что минуты, секунды и их разделитель : в одну строку записываете?
Минуты, это один html-элемент, который для JS-сценария является объектом А, а секунды, это другой html-элемент и для сценария объект B. А задать стили этим элементам, это через CSS.

  Ответить  
 
 автор: pautina   (13.01.2015 в 15:07)   письмо автору
 
   для: confirm   (13.01.2015 в 14:35)
 

Как мне описать стилями объект для минут или секунд?
В данном случае пока в 1 строку всё записано
Вот 3 переменных часы, минуты, секунды

var hour = parseInt(time / 3600); 
var minutes = parseInt(time / 60);
var seconds = time; 

Каким образом мне описать стили для них?

  Ответить  
 
 автор: confirm   (13.01.2015 в 20:30)   письмо автору
 
   для: pautina   (13.01.2015 в 15:07)
 

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

  Ответить  
 
 автор: pautina   (14.01.2015 в 18:44)   письмо автору
 
   для: confirm   (13.01.2015 в 20:30)
 

Как это
а вот значения часов и минут могут находится каждое в своем html элементе
Какой участок кода использовать для того чтоб задать стили для часов или минут

  Ответить  
 
 автор: confirm   (14.01.2015 в 19:24)   письмо автору
 
   для: pautina   (14.01.2015 в 18:44)
 

Никакой, а вот это
<div id="sample_countdown">00:05:00</div>

и сделать, например, так:
<div id="sample_countdown"><span>00</span>:<span>05</span>:<span>00</span></div>

и устанавливайте стили элементам span какие надо.

Сам скрипт должен получать данные в этом сдлучае конечно не из строки 00:05:00, а из этих элементов. Хотя, разумнее все, что вы где-то нашли выбросить в помойку, ибо в JavaScript есть объект работающий с датой/временем - Date().
Скрипт таймера не важно какого отсчета, должен хранить в переменной, а не в какой-то строке, метку стартового времени, которая через 1 секунду уменьшается на единицу (для таймера с обратным отсчетом). Значение этой измененной метки передается в объект Date, и получаем время по этой метке: часы, минуты, секунды. А не вcякие parseInt из всякой ерунды. Полученные значения помещаются в массив, и сравниваются на достижение нуля, если нет, то методом join() объединяем этот массив в строку показанную выше - <span>ХХ</span>:<span>ХХ</span>:<span>ХХ</span>, помещая ее в элемент sample_countdown.

  Ответить  
 
 автор: pautina   (14.01.2015 в 21:54)   письмо автору
 
   для: confirm   (14.01.2015 в 19:24)
 

Насчёт скрипта, да на помойку согласен, здесь наверняка много неправильных моментов. Но тем не менее скрипт работает
<div id="sample_countdown"><span>00</span>:<span>05</span>:<span>00</span></div>

Если посоветуете другой участок кода, был бы только рад?
Но для данного обратного отсчёта времени, в интернете только этот скрипт получилось найти,
В основном всё что по таймерам есть, это стандартные таймеры (где, день, час, мин, сек, и нет запуска по кнопке)
А можно ли сделать чтобы в нашем скрипте, стили можно было менять, после активации отсчёта, т.е. после нажатия.
А то сейчас принажатии на кнопку, работает функция, и все стили сбразываются, а нужное смещение символов цифр справедливо только без активации, пока не нажата кнопка

  Ответить  
 
 автор: confirm   (14.01.2015 в 22:58)   письмо автору
 
   для: pautina   (14.01.2015 в 21:54)
 

Не правда, скриптов таймеров сколь угодно.
И я не говорил, что этот хлам не работает. Семечки ведь из пакета в пакет можно по одной переложить, а можно сразу пересыпать весь пакет во второй. В обеих случаях задача будет выполнена, просто во втором случае гораздо рациональнее.

  Ответить  
Rambler's Top100
вверх

Rambler's Top100 Яндекс.Метрика Яндекс цитирования