Reg.ru: домены и хостинг

Крупнейший регистратор и хостинг-провайдер в России.

Более 2 миллионов доменных имен на обслуживании.

Продвижение, почта для домена, решения для бизнеса.

Более 700 тыс. клиентов по всему миру уже сделали свой выбор.

Перейти на сайт->

Бесплатный Курс "Практика HTML5 и CSS3"

Освойте бесплатно пошаговый видеокурс

по основам адаптивной верстки

на HTML5 и CSS3 с полного нуля.

Начать->

Фреймворк Bootstrap: быстрая адаптивная вёрстка

Пошаговый видеокурс по основам адаптивной верстки в фреймворке Bootstrap.

Научитесь верстать просто, быстро и качественно, используя мощный и практичный инструмент.

Верстайте на заказ и получайте деньги.

Получить в подарок->

Бесплатный курс "Сайт на WordPress"

Хотите освоить CMS WordPress?

Получите уроки по дизайну и верстке сайта на WordPress.

Научитесь работать с темами и нарезать макет.

Бесплатный видеокурс по рисованию дизайна сайта, его верстке и установке на CMS WordPress!

Получить в подарок->

*Наведите курсор мыши для приостановки прокрутки.


Как сделать цифровые часы с помощью CSS3 и jQuery?

Исходники

Пример

Все началось с того, что как-то раз я увидел вот такой скриншот. И тут же я почувствовал, что просто обязан превратить его в реально работающие часы и поделиться ими со всеми желающими.

Если вы хотите узнать, как сделать такие часики, читайте дальше!

Разметка

Много HTML для этих часов не нужно, и связано это с тем, что большая их часть, включая названия дней недели и код для цифр, генерируются динамически.

Итак, вот разметка, которая понадобится для вставки часов на страницу.

index.html


<div id="clock" class="light">
    <div class="display">
        <div class="weekdays"></div>
        <div class="ampm"></div>
        <div class="alarm"></div>
        <div class="digits"></div>
    </div>
</div>

Главный элемент, блок с id = clock, содержит класс display, который, в свою очередь, содержит список дней недели, пометку AM/PM, иконку будильника и само время.

А вот сгенерированная разметка для одной из цифр:


<div class="zero">
    <span class="d1"></span>
    <span class="d2"></span>
    <span class="d3"></span>
    <span class="d4"></span>
    <span class="d5"></span>
    <span class="d6"></span>
    <span class="d7"></span>
</div>

Элемент с классом digits будет содержать 6 таких контейнеров div с элементами span, - по одному контейнеру для каждой из цифр, представляющих текущее время.

Как вы можете видеть по фрагменту выше, эти контейнеры получают имена от zero до nine (т.е. от нуля до девяти) и содержат семь элементов span с уникальными классами. Эти элементы представляют собой сегменты цифр, как в обычный цифровых часах:



Они полностью стилизуются с помощью CSS, а их прозрачность по умолчанию установлена в значение opacity:0. Класс, назначенный их родительскому контейнеру - вот, что делает их видимыми. Вот стили для нуля.

assets/css/styles.css


#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;
}

Все сегменты видимые, за исключением горизонтального в центре (иначе получилась бы восьмерка вместо нуля). Также я добавил свойство transition, с помощью которого происходит анимация степени прозрачности в момент переключения между цифрами.

Конечно, в стилях еще много кода, но здесь я его приводить не буду. Я убежден, что лучший способ понять, как работает CSS - это изучить код работающего примера с помощью Firebug или встроенного в Chrome инструмента для исследования кода.



jQuery

Чтобы заставить наши часы работать, нам придется использовать jQuery для генерации разметки цифр и для установки таймера, по которому время будет обновляться каждую секунду.

Чтобы упростить себе жизнь, мы будем использовать библиотеку moment.js, компенсируя недостатки "родной" функции работы с датой и временем в JavaScript.

assets/js/script.js


$(function(){

    // Выбираем нужные элементы

    var clock = $('#clock'),
        alarm = clock.find('.alarm'),
        ampm = clock.find('.ampm');

    // Сопоставляем цифры их именам (это будет массив)
    var digit_to_name = 'zero one two three four five six seven eight nine'.split(' ');

    // Этот объект будут содержать цифровые элементы
    var digits = {};

    // Позиции для часов, минут и секунд
    var positions = [
        'h1', 'h2', ':', 'm1', 'm2', ':', 's1', 's2'
    ];

    // Генерируем цифры с нужной разметкой и добавляем их в часы

    var digit_holder = clock.find('.digits');

    $.each(positions, function(){

        if(this == ':'){
            digit_holder.append('<div class="dots">');
        }
        else{

            var pos = $('<div>');

            for(var i=1; i<8; i++){
                pos.append('<span class="d' + i + '">');
            }

            // Устанавливаем цифры как пары "ключ:значение" в объекте digits
            digits[this] = pos;

            // Вставляем элементы с цифрами на страницу
            digit_holder.append(pos);
        }

    });

    // Добавляем названия дней недели

    var weekday_names = 'MON TUE WED THU FRI SAT SUN'.split(' '),
        weekday_holder = clock.find('.weekdays');

    $.each(weekday_names, function(){
        weekday_holder.append('<span>' + this + '</span>');
    });

    var weekdays = clock.find('.weekdays span');

    // Запускаем таймер каждую секунду и обновляем часы

    (function update_time(){

        // Используем moment.js для вывода текущего времени как строки
        // hh - это часы в 12-часовом формате
        // mm - это минуты, ss-секунды (все с ведущими нулями),
        // d - это день недели, A - для AM/PM

        var now = moment().format("hhmmssdA");

        digits.h1.attr('class', digit_to_name[now[0]]);
        digits.h2.attr('class', digit_to_name[now[1]]);
        digits.m1.attr('class', digit_to_name[now[2]]);
        digits.m2.attr('class', digit_to_name[now[3]]);
        digits.s1.attr('class', digit_to_name[now[4]]);
        digits.s2.attr('class', digit_to_name[now[5]]);

        // Библиотека возвращает Sunday как первый день недели.
        // Да, бред, поэтому сделаем "понижение",
        // чтобы Sunday стал последним днем недели

        var dow = now[6];
        dow--;

        // Воскресенье!
        if(dow < 0){
            // Make it last
            dow = 6;
        }

        // Выделяем текущий день недели
        weekdays.removeClass('active').eq(dow).addClass('active');

        // Устанавливаем am/pm текст:
        ampm.text(now[7]+now[8]);

        // Устанавливаем запуск функции раз в секунду
        setTimeout(update_time, 1000);

    })();

    // Переключить тему

    $('a.button').click(function(){
        clock.toggleClass('light dark');
    });

});

Самый важный кусок кода здесь - это функция update_time. Внутри нее мы получаем текущее время как строку и используем ее как для определения элементов часов, так и для уставновки нужных названий классов для цифр.

Наши часы готовы!

По материалам tutorialzine.com
Перевод: Дмитрий Науменко

P.S. Понравилось? Присмотритесь к премиум-урокам по различным аспектам сайтостроения, включая JavaScript, jQuery и Ajax, а также к бесплатному курсу по созданию своей CMS-системы на PHP с нуля. Все это поможет вам быстрее и проще освоить практические навыки веб-программирования и самому делать похожие штуки:

Понравился материал и хотите отблагодарить?
Просто поделитесь с друзьями и коллегами!


Смотрите также:

PHP: Получение информации об объекте или классе, методах, свойствах и наследовании

PHP: Получение информации об объекте или классе, методах, свойствах и наследовании

CodeIgniter: жив или мертв?

CodeIgniter: жив или мертв?

Функции обратного вызова, анонимные функции и механизм замыканий

Функции обратного вызова, анонимные функции и механизм замыканий

Применение функции к каждому элементу массива

Применение функции к каждому элементу массива

Слияние массивов. Преобразование массива в строку

Слияние массивов. Преобразование массива в строку

Деструктор и копирование объектов с помощью метода __clone()

Деструктор и копирование объектов с помощью метода __clone()

Эволюция веб-разработчика или Почему фреймворк - это хорошо?

Эволюция веб-разработчика или Почему фреймворк - это хорошо?

Магические методы в PHP или методы-перехватчики (сеттеры, геттеры и др.)

Магические методы в PHP или методы-перехватчики (сеттеры, геттеры и др.)

PHP: Удаление элементов массива

PHP: Удаление элементов массива

Ключевое слово final (завершенные классы и методы в PHP)

Ключевое слово final (завершенные классы и методы в PHP)

50 классных сервисов, программ и сайтов для веб-разработчиков

50 классных сервисов, программ и сайтов для веб-разработчиков

Наверх