Vitamin – сервис для выгодного управления вашей рекламой
  • Все популярные рекламные сети в одном окне
  • Агентское вознаграждение до 16% на личный счет или рекламу
  • Любые дополнительные услуги под ваши потребности
  • Бесплатное обучение маркетингу
  1. Главная >
  2. Блог >
  3. Создаем анимированные часы/таймер при помощи CSS и jQuery

Создаем анимированные часы/таймер при помощи CSS и jQuery

Таймер

В этой статье, мы расскажем вам, как создать красочные и анимированные jQuery/CSS часы в стиле “Halo”, которые помогут вам следить за драгоценным временем.

Шаг 1 – XHTML

Как обычно, мы начинаем с разметки XHTML. Хитрость состоит в том, что XHTML не содержится в demo.html, но динамически вставляется в страницу с помощью jQuery.

Это избавляет нас от необходимости вручную вводить блоки кода для каждого из циферблатов (их у нас три: для часов, минут и секунд). В этом разборе кода мы будем предполагать, что дисплеи у наших часов будут трех разных цветов, но в демо-версии я упростил все до одного цвета. Просто мне так больше нравится! ))

Давайте взглянем на XHTML, который вставляется jQuery:

<!-- Первый класс (зеленый в данном случае) выделяется динамически -->
<div class="green clock"</div>

<!-- Этот div хранит значение единиц, - секунд, минут или часов -->
<div class="display"></div>

<!-- Черная область, которая скрывает основной фон -->
<div class="front left"></div>

<!-- Левая часть фона: -->
<div class="rotate left">
<div class="bg left"></div>
</div>

<!-- Правая часть фона: -->
<div class="rotate right">
<div class="bg right"><div id="fcbg"></div></div>
</div>

</div>

Этот код содержится в jquery.tzineClock / jquery.tzineClock.js. Он генерируется три раза: первый для часов, второй для минут, и третий для секунд. Затем, они анимируются и обновляются каждую секунду.

Существуют три класса, которые присваиваются самому верхнему контейнеру в процессе генерации – зеленый, синий и красный. Мы меняем цвет циферблата путем присвоения того или инного класса.

Переходим к следующему шагу…

Таймер 2

Шаг 2 – CSS

Прежде, чем наши стили будут иметь какое либо влияние на страницу, мы должны включить их в head часть нашего файла:

demo.html

<link rel="stylesheet" type="text/css" href="styles.css" />
<link rel="stylesheet" type="text/css" href="jquery.tzineClock/jquery.tzineClock.css" />

Эти строки кода, импортируют styles.css и jquery.tzineClock.css на страницу. Первый, стилизует демо страницу, а второй, красочные циферблаты (они являются частью плагина).

Теперь мы можем более внимательно взглянуть на правила CSS:

styles.css

body,h1,h2,h3,p,quote,small,form,input,ul,li,ol,label{
    /* Простой сброс страницы */
    margin:0;
    padding:0;
}

body{
    /* Установка по умолчанию цвет текста, фона и шрифта */
    color:#fff;
    font-size:13px;
    background: #222;
    font-family:Arial, Helvetica, sans-serif;
}

#fancyClock{
    height:200px;
    width:600px;
    position:absolute;
    top:50%;
    left:50%;
    margin:-100px 0 0 -300px;
}

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

Затем, мы стилизуем body страницы и fancyClock div, в который, мы позже вставим три циферблата. Также центрируем его на экране за счет абсолютной позиции и смещения величины margin.

jquery.tzineClock.css

.clock{
    /* .clock div Динамически создан jQuery */
    background-color:#222;
    height:200px;
    width:200px;
    position:relative;
    overflow:hidden;
    float:left;
}

.clock .rotate{
    /* Есть два .rotate divs - один для каждый половины фона-подложки */
    position:absolute;
    width:200px;
    height:200px;
    top:0;
    left:0;
}

.rotate.right{
    display:none;
    z-index:11;
}

.clock .bg, .clock .front{
    width:100px;
    height:200px;
    background-color:#222;
    position:absolute;
    top:0;
}

.clock .display{
    /* Содержит число секунд, минут или часов */
    position:absolute;
    width:200px;
    font-family:"Lucida Sans Unicode", "Lucida Grande", sans-serif;
    z-index:20;
    color:#F5F5F5;
    font-size:60px;
    text-align:center;
    top:65px;
    left:0;

    /* CSS3 text shadow: */
    text-shadow:4px 4px 5px #333333;
}

/* Левая часть бэкграунда */

.clock .bg.left{ left:0; }

/* Индивидуальная стилизация каждого цвета : */
.orange .bg.left{ background:url(img/bg_orange.png) no-repeat left top; }
.green .bg.left{ background:url(img/bg_green.png) no-repeat left top; }
.blue .bg.left{	background:url(img/bg_blue.png) no-repeat left top; }

/* Правая часть бэкграунда */
.clock .bg.right{ left:100px; }

.orange .bg.right{ background:url(img/bg_orange.png) no-repeat right top; }
.green .bg.right{ background:url(img/bg_green.png) no-repeat right top; }
.blue .bg.right{ background:url(img/bg_blue.png) no-repeat right top; }

.clock .front.left{
    left:0;
    z-index:10;
}
#fcbg{ background:url(img/bg_grey.png)
repeat-x; width:600px;height:200px;z-index:11;position:absolute;}

jquery.tzineClock.css является частью нашего плагина (наряду c jquery.tzineClock.js) и он стилизирует красочные циферблаты . Контейнер #fcbg является нашей подложкой под циферблаты и показывает границы циферблата.

Одним из наиболее интересных моментов, является использование отдельных правил для стилизации цвета циферблатов.

Шаг 3 – jQuery

Перенос всего JavaScript в плагин делает очень легким повторное использование кода, и в то же время позволяет нам использовать возможности jQuery селекторов и методов.

Чтобы была возможность использовать jQuery библиотеку, мы сначала должны, включить пару скриптов в страницу:

demo.html

<script type="text/javascript" src="//ajax.googleapis.com/ajax/libs/jquery/1.3.2/jquery.min.js"></script>
<script type="text/javascript" src="jquery.tzineClock/jquery.tzineClock.js"></script>
<script type="text/javascript" src="script.js"></script>

Первым файлом, является сама библиотека, включена из Google CDN. Затем, у нас есть плагин и скрипт-файл, который запускает демо.

script.js

$(document).ready(function(){
    /* Этот код выполняется после того, как DOM был полностью загружен */

    $('#fancyClock').tzineClock();

});

Давайте копнём немного глубже в плагин:

jquery.tzineClock.js – Часть 1

(function($){
    // Глобальный объект используемый функцией плагина:
    var gVars = {};

    // Продление основы jQuery:

    $.fn.tzineClock = function(opts){

        // "this" содержит элементы, которые были выбраны при вызове плагина:
	$('elements').tzineClock();
        // Если селектор вернул более одного элемента, мы используем первый:
        var container = this.eq(0);
        if(!container)
        {
            try{
                console.log("Invalid selector!");
            } catch(e){}

            return false;
        }

        if(!opts) opts = {};

        var defaults = {
            /* Дополнительные опции будут добавлены в будущих версиях плагина. */
        };

        /* Слияние предоставленых параметров с параметрами по умолчанию,
(будет использоваться в будущих версиях плагина): */

        $.each(defaults,function(k,v){
            opts[k] = opts[k] || defaults[k];
        });

        // Вызов функции setUp и передача container,
        // будет доступна для setUp функции, как "this":

        setUp.call(container);

        return this;
    }

    function setUp()
    {
        // Цвета циферблата:
        var colors = ['orange','blue','green'];

        var tmp;
        for(var i=0;i<3;i++)
        {
            // Создание нового элемента и установка цвета, как имя класса:

            tmp = $('<div>').attr('class',colors[i]+' clock').html(
                '<div class="display"></div>'+
                '<div class="front left"></div>'+
                '<div class="rotate left">'+
                '<div class="bg left"></div>'+
                '</div>'+
                '<div class="rotate right">'+
                '<div class="bg right"></div>'+
                '</div>'
            );

            // Присоединение к fancyClock контейнеру:
            $(this).append(tmp);

            // Назначение некоторых элементов как переменных, для скорости:
            tmp.rotateLeft = tmp.find('.rotate.left');
            tmp.rotateRight = tmp.find('.rotate.right');
            tmp.display = tmp.find('.display');

            // Добавление циферблата, как глобальной переменной.
Будет доступна в качестве gVars.colorName
            gVars[colors[i]] = tmp;
        }

        //Настройка интервала, выполняемого каждые 1000 миллисекунд:
        setInterval(function(){

            var currentTime = new Date();
            var h = currentTime.getHours();
            var m = currentTime.getMinutes();
            var s = currentTime.getSeconds();

            animation(gVars.green, s, 60);
            animation(gVars.blue, m, 60);
            animation(gVars.orange, h, 24);
        },1000);
    }

Создание плагина для jQuery сводится к определению пользовательской функцию с помощью метода jQuery.fn. Таким образом, ваша функция доступна на любых элементах, которые вы обычно используете на jQuery.

Например, в script.js, мы выбираем div ширину id fancyClock и используем tzineClock () метод: $ (‘# FancyClock’) tzineClock ();. Элементы, которые мы выбрали, позже передаются tzineClock функции и доступны через “this” свойство.

Поскольку, там может быть выбран более чем один элемент, мы извлекаем только первый из множества с помощью eq(0) метода. Позже, у нас есть setUp() функция, которая вставляет разметки для циферблатов и настраивает интервал, который будет обновлять цифры каждую секунду.

jquery.tzineClock.js – Часть 2

function animation(clock, current, total)
    {
        // Расчет текущего угла:
        var angle = (360/total)*(current);

        var element;

        if(current==0)
        {
            //Скрытие правой половины background:
            clock.rotateRight.hide();

            // Сброс вращения левой части:
            rotateElement(clock.rotateLeft,0);
        }

        if(angle<=180)
        {
            // Левая часть вращается, а правая, в настоящее время, скрыта:
            element = clock.rotateLeft;
        }
        else
        {
            // Первая часть вращения завершен, поэтому начинает вращаться
правая часть:
            clock.rotateRight.show();
            clock.rotateLeft.show();

            rotateElement(clock.rotateLeft,180);
            element = clock.rotateRight;

            angle = angle-180;
        }

        rotateElement(element,angle);

        // Настройка текста внутри элемента, вставки нуля, если необходимо:
        clock.display.html(current<10?'0'+current:current);
    }

    function rotateElement(element,angle)
    {
        // Вращение элемента, в зависимости от браузера:
        var rotate = 'rotate('+angle+'deg)';

        if(element.css('MozTransform')!=undefined)
            element.css('MozTransform',rotate);

        else if(element.css('WebkitTransform')!=undefined)
            element.css('WebkitTransform',rotate);

        // Версия для Internet Explorer с помощью фильтров, работает,
но немного с багами:

        else if(element.css("filter")!=undefined)
        {
            var cos = Math.cos(Math.PI * 2 / 360 * angle);
            var sin = Math.sin(Math.PI * 2 / 360 * angle);

            element.css("filter","progid:DXImageTransform.Microsoft.Matrix
(M11="+cos+",M12=-"+sin+",M21="+sin+",M22="+cos+",SizingMethod='auto expand',
FilterType='nearest neighbor')");
            element.css("left",-Math.floor((element.width()-200)/2));
            element.css("top",-Math.floor((element.height()-200)/2));
        }
    }
})(jQuery)

Последние две функции, используемые плагином, это animation и rotateElement. Первая функция обновляет циферблат, в соответствии с переданными значениями (мы также передаем параметр с максимальным значением, для того, чтобы функция могла вычислить вращение).

Вторая функция – вращает переданный элемент. Вращение работает только для Firefox, Safari, Chrome и IE6 +. Internet Explorer не поддерживает CSS3 rotation, используемый другими браузерами, но предоставляет фильтр, который позволяет сделать подобное преобразование.

На этом, наши красочные часы jQuery готовы! Высоких вам конверсий! 

blog comments powered by Disqus
Vitamin – сервис для выгодного управления вашей рекламой
  • Все популярные рекламные сети в одном окне
  • Агентское вознаграждение до 16% на личный счет или рекламу
  • Любые дополнительные услуги под ваши потребности
  • Бесплатное обучение маркетингу
copyright © 2011–2024 Все права защищены
Запрещено любое копирование материалов ресурса без письменного согласия владельца — ООО "Феникс-Маркетинг". ИНН:7725812838, КПП:772501001, ОГРН: 513774619323915280, Москва, ул. Ленинская слобода, д. 19, стр. 1, этаж/пом 3/25

Генеральный партнёр: STRATE FZ-LLC License number 47005249 Address: B03-227 Business Center 02 RAKEZ Business Zone-FZ RAK (Ras Al Khaimah), United Arab Emirates Email: corporate@strate.ae