binary clock

2012 by www.tim-pietrusky.de https://twitter.com/#!/TimPietrusky

HTML

<div class="buttons">
  <button class="btn button-rotate">Rotate</button>
  <button class="btn button-digital" disabled="disabled">Digital ON</button>
</div>

<div id="binary">
  <div class="hours">
    <div></div>
    <div></div>
    <div></div>
    <div></div>
    <div></div>
  </div>
  <div class="minutes">
    <div></div>
    <div></div>
    <div></div>
    <div></div>
    <div></div>
    <div></div>
  </div>
  <div class="seconds">
    <div></div>
    <div></div>
    <div></div>
    <div></div>
    <div></div>
    <div></div>
  </div>

  <div id="active"></div>
</div>

CSS

* {
  -moz-box-sizing: border-box;
  -webkit-box-sizing: border-box;
  box-sizing: border-box;
}

body {
  height: 100%;
  margin: 0;
  padding: 0;
  background: #000;
  font-family: 'Revalia', cursive;
}

.buttons {
  position: fixed;
  top: 50px;
  right: 5px;
  z-index: 1337;
}

.btn {
  -moz-box-shadow: inset 0px 1px 0px 0px #ffffff;
  -webkit-box-shadow: inset 0px 1px 0px 0px #ffffff;
  box-shadow: inset 0px 1px 0px 0px #ffffff;
  background: #ededed;
  -moz-border-radius: 6px;
  -webkit-border-radius: 6px;
  border-radius: 6px;
  border: 1px solid #dcdcdc;
  color: #777777;
  font-family: arial;
  font-size: 10px;
  font-weight: bold;
  padding: 3px 6px;
  text-decoration: none;
  text-shadow: 1px 1px 0px #ffffff;
  opacity: .1;
  transition: all 1s ease-in-out;
}

.btn:hover {
  opacity: 1;
}

.btn:active {
  position: relative;
  top: 1px;
}

#binary {
  height: 100%;
  width: 300px;
  margin-left: auto;
  margin-right: auto;
  transition: all .5s ease-in;
}

#binary.rotated {
  /* http://stackoverflow.com/a/6454675 */
  /* special */
  -webkit-transform-origin: 50% 300px;
  -webkit-transform: rotate(90deg) scale(1.65, 1.65);
}

#binary.rotated #active {
  /* special */
  -webkit-transform-origin: 0 0;
  /*
     * @TODO: 20120324 [TimPietrusky] - Add -webkit-animation
     */
  -webkit-transform: rotate(-90deg) scale(1.35, 1.35) translate(50px, -40px);
}

.digital {
  color: rgb(0, 0, 0);
  font-size: 2.4em;
  font-family: sans;
  margin: 20px 55px 0 25px;
  text-shadow: 0 0 45px rgba(255, 255, 255, .6);
  -webkit-animation: digital 4s infinite;
}

.hours,
.minutes,
.seconds {
  float: left;
  margin-top: 50px;
  margin-left: 50px;
  width: 50px;
  height: 400px;
  /* fun */
  /* 
    width:100%;
    */
}

.hours {
  margin-top: 125px;
}

.hours div,
.minutes div,
.seconds div {
  background: rgba(204, 204, 204, .5);
  border: 5px solid #333;
  display: block;
  height: 25px;
  width: 25px;
  margin-bottom: 50px;
  -webkit-transition: all .3s ease-in;
 ...

JavaScript

var date,
  bin,
  digitalClock,
  body,
  active,
  navigation,
  binary;

digitalClock = document.getElementsByClassName('digital')[0];

body = document.body;

binary = document.getElementById('binary');

active = {
  domElement: document.getElementById('active'),

  secondsx: false,
  minutesx: false,
  hoursx: false,

  secondsxString: 'secondsx',
  minutesxString: 'minutesx',
  hoursxString: 'hoursx',

  secondsxDec: '',
  minutesxDec: '',
  hoursxDec: '',

  getActive: function() {
    if (active.secondsx) return active.secondsxString;
    if (active.minutesx) return active.minutesxString;
    if (active.hoursx) return active.hoursxString;
  },

  setNext: function(shit, bin) {
    active.reset();
    active[shit] = true;
    active[shit + 'Dec'] = bin;
  },

  reset: function() {
    active.secondsx = false;
    active.minutesx = false;
    active.hoursx = false;
  }
};

navigation = {
  init: function() {
    navigation.button.rotate.register();
    navigation.button.digital.register();
  },

  /*
   * @TODO: 20120324 [TimPietrusky] - Button-Factory! Now! FUCK!
   */
  button: {
    rotate: {
      domElement: document.getElementsByClassName('button-rotate')[0],
      register: function() {
        /* onclick */
        document.getElementsByClassName('button-rotate')[0].onclick = function() {
          if (binary.className == 'rotated') {
            binary.className = '';
          } else {
            binary.className = 'rotated';
          }
        }
      }
    },
    digital: {
      domElement: document.getElementsByClassName('button-digital')[0],
      lg: {
        labelOn: 'Digital ON',
        labelOff: 'Digital OFF'
      },
      register: function() {
        /* onclick */
        document.getElementsByClassName('button-digital')[0].onclick = function() {

          /*
           * @TODO: 20120328 [TimPietrusky] - event based or something
           */
          if (active.hasClass('shutoff')) {
            console.log("sadffdas");
        ...