Добавление будильника к цифровым часам
Идея
Чтобы сделать цифровые часы с поддержкой будильника, нам нужно добавить несколько важных функциональных элементов в коде с прошлой недели:
Нам нужно иметь способ, чтобы устанавливать и редактировать будильник. Это потребует какой-то диалогового окна с полями для установки времени сигнала будильника.
HTML
У нас будет два диалога - одно для установки / редактирования будильника, а другой, для отображается при срабатывании сигнала.
Оба эти диалога скрыты с помощью CSS и показаны с JQuery FadeIn() метода, когда они необходимы. Другое дело, стоит отметить, что будильник использует HTML5 типы ввода номера с минимальным значением 0. Количество входов очень легко проверить с JavaScript, и они также поднимут числа с клавиатуры на мобильных устройствах.
Далее идет элемент HTML5 аудио. Он содержит адреса с двумя различными аудио форматами. Первый mp3 версию, а второй OGG. Формат OGG необходим только в Firefox, который еще не поддерживает воспроизведение mp3 из-за проблем с лицензированием. В значительной степени все другие браузеры, которые поддерживают HTML5 аудио также поддерживают mp3.
Предварительный атрибут preload сообщает браузеру, что эти звуковые файлы должны быть загружены раньше времени, что сделает их незамедлительными как только мы решили проиграть их. Воспроизведение аудио файлов предельно прост благодаря JavaScript API HTML5 аудио.
JQuery
В этом разделе, мы будем расширять JQuery код цифровых часы для поддержки и проигрывания будильника. Я не буду объяснять этот код, мы писали его в прошлый раз, тут только новые дополнения.
Первое, что мы должны сделать, это определить число переменных, важных для функционирования будильника:
Далее, мы должны проверить, есть ли сигнал будильника в зависимости от каждого кванта update_time() функции.
Когда счетчик достигает 0, то это будет означать, что мы должны играть звуковой сигнал и показывать "Время вышло".
Последнее, что осталось сделать, это справиться с "Установка будильника":
Есть несколько интересных вещей в этом коде. Обратите внимание, как я использую встроенные действия на линии 35, которая существует для ввода номера типа в современных браузерах. Он говорит нам, является ли содержимое поля ввода числа больше 0 (помните, что они имеют минимальное значение 0).
Чтобы сделать цифровые часы с поддержкой будильника, нам нужно добавить несколько важных функциональных элементов в коде с прошлой недели:
Нам нужно иметь способ, чтобы устанавливать и редактировать будильник. Это потребует какой-то диалогового окна с полями для установки времени сигнала будильника.
HTML
У нас будет два диалога - одно для установки / редактирования будильника, а другой, для отображается при срабатывании сигнала.
Код
<div class="overlay">
<div id="alarm-dialog">
<h2>Set alarm after</h2>
<label class="hours">
Часы
<input type="number" value="0" min="0">
</label>
<label class="minutes">
Минуты
<input type="number" value="0" min="0">
</label>
<label class="seconds">
Секунды
<input type="number" value="0" min="0">
</label>
<div class="button-holder">
<a id="alarm-set" class="button blue">Установить</a>
<a id="alarm-clear" class="button red">Очистить</a>
</div>
<a class="close"></a>
</div>
</div>
<div class="overlay">
<div id="time-is-up">
<h2>Time's up!</h2>
<div class="button-holder">
<a class="button blue">Закрыть</a>
</div>
</div>
</div>
<div id="alarm-dialog">
<h2>Set alarm after</h2>
<label class="hours">
Часы
<input type="number" value="0" min="0">
</label>
<label class="minutes">
Минуты
<input type="number" value="0" min="0">
</label>
<label class="seconds">
Секунды
<input type="number" value="0" min="0">
</label>
<div class="button-holder">
<a id="alarm-set" class="button blue">Установить</a>
<a id="alarm-clear" class="button red">Очистить</a>
</div>
<a class="close"></a>
</div>
</div>
<div class="overlay">
<div id="time-is-up">
<h2>Time's up!</h2>
<div class="button-holder">
<a class="button blue">Закрыть</a>
</div>
</div>
</div>
Оба эти диалога скрыты с помощью CSS и показаны с JQuery FadeIn() метода, когда они необходимы. Другое дело, стоит отметить, что будильник использует HTML5 типы ввода номера с минимальным значением 0. Количество входов очень легко проверить с JavaScript, и они также поднимут числа с клавиатуры на мобильных устройствах.
Далее идет элемент HTML5 аудио. Он содержит адреса с двумя различными аудио форматами. Первый mp3 версию, а второй OGG. Формат OGG необходим только в Firefox, который еще не поддерживает воспроизведение mp3 из-за проблем с лицензированием. В значительной степени все другие браузеры, которые поддерживают HTML5 аудио также поддерживают mp3.
Код
<audio id="alarm-ring" preload>
<source src="assets/audio/ticktac.mp3" type="audio/mpeg" />
<source src="assets/audio/ticktac.ogg" type="audio/ogg" />
</audio>
<source src="assets/audio/ticktac.mp3" type="audio/mpeg" />
<source src="assets/audio/ticktac.ogg" type="audio/ogg" />
</audio>
Предварительный атрибут preload сообщает браузеру, что эти звуковые файлы должны быть загружены раньше времени, что сделает их незамедлительными как только мы решили проиграть их. Воспроизведение аудио файлов предельно прост благодаря JavaScript API HTML5 аудио.
JQuery
В этом разделе, мы будем расширять JQuery код цифровых часы для поддержки и проигрывания будильника. Я не буду объяснять этот код, мы писали его в прошлый раз, тут только новые дополнения.
Первое, что мы должны сделать, это определить число переменных, важных для функционирования будильника:
Код
var dialog = $('#alarm-dialog').parent(),
alarm_set = $('#alarm-set'),
alarm_clear = $('#alarm-clear'),
time_is_up = $('#time-is-up').parent();
// This will hold the number of seconds left
// until the alarm should go off
var alarm_counter = -1;
alarm_set = $('#alarm-set'),
alarm_clear = $('#alarm-clear'),
time_is_up = $('#time-is-up').parent();
// This will hold the number of seconds left
// until the alarm should go off
var alarm_counter = -1;
Далее, мы должны проверить, есть ли сигнал будильника в зависимости от каждого кванта update_time() функции.
Код
// Is there an alarm set?
if(alarm_counter > 0){
// Decrement the counter with one second
alarm_counter--;
// Activate the alarm icon
alarm.addClass('active');
}
else if(alarm_counter == 0){
time_is_up.fadeIn();
// Play the alarm sound. This will fail
// in browsers which don't support HTML5 audio
try{
$('#alarm-ring')[0].play();
}
catch(e){}
alarm_counter--;
alarm.removeClass('active');
}
else{
// The alarm has been cleared
alarm.removeClass('active');
}
if(alarm_counter > 0){
// Decrement the counter with one second
alarm_counter--;
// Activate the alarm icon
alarm.addClass('active');
}
else if(alarm_counter == 0){
time_is_up.fadeIn();
// Play the alarm sound. This will fail
// in browsers which don't support HTML5 audio
try{
$('#alarm-ring')[0].play();
}
catch(e){}
alarm_counter--;
alarm.removeClass('active');
}
else{
// The alarm has been cleared
alarm.removeClass('active');
}
Когда счетчик достигает 0, то это будет означать, что мы должны играть звуковой сигнал и показывать "Время вышло".
Последнее, что осталось сделать, это справиться с "Установка будильника":
Код
// Handle setting and clearing alamrs
$('.alarm-button').click(function(){
// Show the dialog
dialog.trigger('show');
});
dialog.find('.close').click(function(){
dialog.trigger('hide')
});
dialog.click(function(e){
// When the overlay is clicked,
// hide the dialog.
if($(e.target).is('.overlay')){
// This check is need to prevent
// bubbled up events from hiding the dialog
dialog.trigger('hide');
}
});
alarm_set.click(function(){
var valid = true, after = 0,
to_seconds = [3600, 60, 1];
dialog.find('input').each(function(i){
// Using the validity property in HTML5-enabled browsers:
if(this.validity && !this.validity.valid){
// The input field contains something other than a digit,
// or a number less than the min value
valid = false;
this.focus();
return false;
}
after += to_seconds[i] * parseInt(parseInt(this.value));
});
if(!valid){
alert('Please enter a valid number!');
return;
}
if(after < 1){
alert('Please choose a time in the future!');
return;
}
alarm_counter = after;
dialog.trigger('hide');
});
alarm_clear.click(function(){
alarm_counter = -1;
dialog.trigger('hide');
});
// Custom events to keep the code clean
dialog.on('hide',function(){
dialog.fadeOut();
}).on('show',function(){
// Calculate how much time is left for the alarm to go off.
var hours = 0, minutes = 0, seconds = 0, tmp = 0;
if(alarm_counter > 0){
// There is an alarm set, calculate the remaining time
tmp = alarm_counter;
hours = Math.floor(tmp/3600);
tmp = tmp%3600;
minutes = Math.floor(tmp/60);
tmp = tmp%60;
seconds = tmp;
}
// Update the input fields
dialog.find('input').eq(0).val(hours).end().eq(1).val(minutes).end().eq(2).val(seconds);
dialog.fadeIn();
});
time_is_up.click(function(){
time_is_up.fadeOut();
});
$('.alarm-button').click(function(){
// Show the dialog
dialog.trigger('show');
});
dialog.find('.close').click(function(){
dialog.trigger('hide')
});
dialog.click(function(e){
// When the overlay is clicked,
// hide the dialog.
if($(e.target).is('.overlay')){
// This check is need to prevent
// bubbled up events from hiding the dialog
dialog.trigger('hide');
}
});
alarm_set.click(function(){
var valid = true, after = 0,
to_seconds = [3600, 60, 1];
dialog.find('input').each(function(i){
// Using the validity property in HTML5-enabled browsers:
if(this.validity && !this.validity.valid){
// The input field contains something other than a digit,
// or a number less than the min value
valid = false;
this.focus();
return false;
}
after += to_seconds[i] * parseInt(parseInt(this.value));
});
if(!valid){
alert('Please enter a valid number!');
return;
}
if(after < 1){
alert('Please choose a time in the future!');
return;
}
alarm_counter = after;
dialog.trigger('hide');
});
alarm_clear.click(function(){
alarm_counter = -1;
dialog.trigger('hide');
});
// Custom events to keep the code clean
dialog.on('hide',function(){
dialog.fadeOut();
}).on('show',function(){
// Calculate how much time is left for the alarm to go off.
var hours = 0, minutes = 0, seconds = 0, tmp = 0;
if(alarm_counter > 0){
// There is an alarm set, calculate the remaining time
tmp = alarm_counter;
hours = Math.floor(tmp/3600);
tmp = tmp%3600;
minutes = Math.floor(tmp/60);
tmp = tmp%60;
seconds = tmp;
}
// Update the input fields
dialog.find('input').eq(0).val(hours).end().eq(1).val(minutes).end().eq(2).val(seconds);
dialog.fadeIn();
});
time_is_up.click(function(){
time_is_up.fadeOut();
});
Есть несколько интересных вещей в этом коде. Обратите внимание, как я использую встроенные действия на линии 35, которая существует для ввода номера типа в современных браузерах. Он говорит нам, является ли содержимое поля ввода числа больше 0 (помните, что они имеют минимальное значение 0).
-
FalleN -
4358 -
1 -
236
Но только нужно ставить наверное на те модули которые обновляться должны не раньше через пару тройку минут
С Уважением, Андрей...