analog_digital_clock-9.1.x-dev/js/analog_digital_clock_circle.js

js/analog_digital_clock_circle.js
(function ($) {
  'use strict';
  Drupal.behaviors.analog_digital_circle = {
    attach: function (context, settings) {
      var s = Snap(document.getElementById('analog-clock'));
      var seconds = s.select('#seconds');
      var minutes = s.select('#minutes');
      var hours = s.select('#hours');
      var rim = s.select('#rim');
      var face = {
        elem: s.select('#face'),
        cx: s.select('#face').getBBox().cx,
        cy: s.select('#face').getBBox().cy
      };
      var angle = 0;
      var easing = function (a) {
        return a === !! a ? a : Math.pow(4, - 10 * a) * Math.sin((a - .075) * 2 * Math.PI / .3) + 1;
      };

      var sshadow = seconds.clone();
      var mshadow = minutes.clone();
      var hshadow = hours.clone();
      var rshadow = rim.clone();
      var shadows = [sshadow, mshadow, hshadow];
      seconds.before(sshadow);
      minutes.before(mshadow);
      hours.before(hshadow);
      rim.before(rshadow);
      // Create a filter to make a blurry black version of a thing
      var filter = Snap.filter.blur(0.1) + Snap.filter.brightness(0);

      // Add the filter, shift and opacity to each of the shadows
      shadows.forEach(function (el) {
        el.attr({
          transform: 'translate(0, 2)',
          opacity: 0.2,
          filter: s.filter(filter)
        });
      });
      rshadow.attr({
        transform: 'translate(0, 8) ',
        opacity: 0.5,
        filter: s.filter(Snap.filter.blur(0, 8) + Snap.filter.brightness(0))
      });
      function update() {
        var time = new Date();
        setHours(time);
        setMinutes(time);
        setSeconds(time);
      }
      function setHours(t) {
        var hour = t.getHours();
        hour %= 12;
        hour += Math.floor(t.getMinutes() / 10) / 6;
        var angle = hour * 360 / 12;
        hours.animate({
          transform: 'rotate(' + angle + ' 244 251)'
        },
        100,
        mina.linear,
        function () {
          if (angle === 360) {
            hours.attr({transform: 'rotate(' + 0 + ' ' + face.cx + ' ' + face.cy + ')'});
            hshadow.attr({transform: 'translate(0, 2) rotate(' + 0 + ' ' + face.cx + ' ' + face.cy + 2 + ')'});
          }
        }
        );
        hshadow.animate({
          transform: 'translate(0, 2) rotate(' + angle + ' ' + face.cx + ' ' + face.cy + 2 + ')'
        },
        100,
        mina.linear
        );
      }
      function setMinutes(t) {
        var minute = t.getMinutes();
        minute %= 60;
        minute += Math.floor(t.getSeconds() / 10) / 6;
        var angle = minute * 360 / 60;
        minutes.animate({
          transform: 'rotate(' + angle + ' ' + face.cx + ' ' + face.cy + ')'
        },
        100,
        mina.linear,
        function () {
          if (angle === 360) {
            minutes.attr({transform: 'rotate(' + 0 + ' ' + face.cx + ' ' + face.cy + ')'});
            mshadow.attr({transform: 'translate(0, 2) rotate(' + 0 + ' ' + face.cx + ' ' + face.cy + 2 + ')'});
          }
        }
        );
        mshadow.animate({
          transform: 'translate(0, 2) rotate(' + angle + ' ' + face.cx + ' ' + face.cy + 2 + ')'
        },
        100,
        mina.linear
        );
      }
      function setSeconds(t) {
        t = t.getSeconds();
        t %= 60;
        var angle = t * 360 / 60;
        if (angle === 0) {
          angle = 360;
        }
        seconds.animate(
          {
            transform: 'rotate(' + angle + ' ' + face.cx + ' ' + face.cy + ')'
          },
          600,
          easing,
          function () {
            if (angle === 360) {
              seconds.attr({transform: 'rotate(' + 0 + ' ' + face.cx + ' ' + face.cy + ')'});
              sshadow.attr({transform: 'translate(0, 2) rotate(' + 0 + ' ' + face.cx + ' ' + face.cy + 2 + ')'});
            }
          }
        );
        sshadow.animate({
          transform: 'translate(0, 2) rotate(' + angle + ' ' + face.cx + ' ' + face.cy + 2 + ')'
        },
        600,
        easing
        );
      }
      setInterval(update, 1000);
    }
  };
}(jQuery));

Главная | Обратная связь

drupal hosting | друпал хостинг | it patrol .inc