Все началось тогда, когда мы наткнулись на этот снимок в dribbble. Нам тут же захотелось преобразовать это в рабочие часы и поделиться ими с читателями. Если вам хочется узнать, как сделать это, продолжайте читать!
Разметка
Здесь вам не понадобится много HTML-кода. Так как большая часть – названия дней недели и код цифр – генерируется динамически. Представляем вам код, который вам понадобится для того, чтобы использовать часы:
index.html
Главный элемент, div #clock, содержит .display, который в свою очередь содержит список дней недели, ярлык AM/PM, иконку будильника и время. Давайте рассмотрим сгенерированную разметку для одной из цифр:
Элемент .digits будет содержать 6 таких div’ов со span-элементами – по одному на каждую цифру. Как видно из представленного выше фрагмента, эти div’ы получают класс от zero до nine (подробнее об этом во второй части), и содержат 7 span-элементов с уникальными классами. Эти span-элементы представляют собой часть цифр как в старых цифровых часах: Все они полностью оформлены при помощи CSS и уровень непрозрачности (opacity) по умолчанию выставлен на 0. Класс, заданный к их родительскому div-элементу, это именно то, что делает их видимыми. Предлагаем вам CSS-код для ноля:
assets/css/styles.css
/* 0 */
#clock .digits div.zero .d1,
#clock .digits div.zero .d3,
#clock .digits div.zero .d4,
#clock .digits div.zero .d5,
#clock .digits div.zero .d6,
#clock .digits div.zero .d7{
opacity:1;
}
Все отделения видны за исключением центрального (потому что иначе это будет 8). Мы добавили свойство CSS3 transition ко всем этим span-элементам, которое позволит нам анимировать уровень непрозрачности при смене цифр.В файле также есть множество другого кода, но о нем мы вам рассказывать сейчас не будем. Нам кажется, что лучше всего изучать CSS посредством редактирования в реальном времени при помощи Firebug, Inspector в Chrome, либо при помощи инструментов разработчиков в вашем любимом браузере.
jQuery-код
Чтобы наши часы заработали, нам нужно использовать jQuery, чтобы сгенерировать разметку для каждой цифры, и выставить таймер на обновление классов каждую секунду. Чтобы облегчить нашу жизнь, мы воспользуемся библиотекой moment.js, чтобы компенсировать отсутствие родных функций javascript – date и time.
assets/js/script.js
$(function(){
// Cache some selectors
var clock = $('#clock'),
alarm = clock.find('.alarm'),
ampm = clock.find('.ampm');
// Map digits to their names (this will be an array)
var digit_to_name = 'zero one two three four five six seven eight nine'.split(' ');
// This object will hold the digit elements
var digits = {};
// Positions for the hours, minutes, and seconds
var positions = [
'h1', 'h2', ':', 'm1', 'm2', ':', 's1', 's2'
];
// Generate the digits with the needed markup,
// and add them to the clock
var digit_holder = clock.find('.digits');
$.each(positions, function(){
if(this == ':'){
digit_holder.append('');
}
else{
var pos = $('');
for(var i=1; i