Creating A Minimal Text Clock Plugin With jQuery

Creating A Minimal Text Clock Plugin With jQuery
File Size: 3.33 KB
Views Total:
Last Update:
Publish Date:
Official Website: Go to website
License: MIT
   

A minimal jQuery based text clock that provides an unique way of displaying the current time on your webpage. It will automatically change the background color of your html page based upon the time of day.

How to use it:

1. Add the CSS class 'am' to your body tag.

<body class="am">

2. The HTML structure for the text clock.

<div class="clock">
  <span id="it-is" class="selected"> IT IS </span> 
  <div class="changing">
    <span id="around"> AROUND </span>
    <span id="almost"> ALMOST </span>
    <span id="ten"> TEN </span>
    <span id="quarter"> QUARTER </span>
    <span id="twenty"> TWENTY </span>
    <span id="five"> FIVE </span>
    <span id="half" >HALF</span>
    <span id="minutes"> MINUTES </span>
    <span id="to"> TO </span>
    <span id="past"> PAST </span>
    <span id="1"> ONE </span>
    <span id="3"> THREE </span>
    <span id="2"> TWO </span>
    <span id="4"> FOUR </span>
    <span id="5"> FIVE </span>
    <span id="6"> SIX </span>
    <span id="7"> SEVEN </span>
    <span id="8"> EIGHT </span>
    <span id="9"> NINE </span>
    <span id="10"> TEN </span>
    <span id="11"> ELEVEN </span>
    <span id="12"> TWELVE </span>
    <span id="oclock"> O'CLOCK </span>
  </div>
</div>

3. Include the necessary jQuery library on your webpage.

<script src="//code.jquery.com/jquery-1.12.0.min.js"></script>

4. The core function.

// Returns the current time
function getTime () {
  return new Date();
}

var minsInWords = {
  5 : "five",
  10 : "ten",
  15 : "quarter",
  20 : "twenty",
  25 : ["twenty", "five"],
  30 : "half",
  35 : ["twenty", "five"],
  40 : "twenty",
  45 : "quarter",
  50 : "ten",
  55 : "five"
};

// Returns the nearest "5" of the given number
function roundToFive (num) {
  return 5 * Math.round(num/5);
}

// Gets the current time and sets it on the text clock
function setTime () {
  $(".clock .changing").children().removeClass("selected", { easing: 'easeOutBounce' });

  var currTime = getTime();
  var hours = currTime.getHours();
  if (hours > 12) {
    hours = hours - 12;
    $("body").removeClass("am");
    $("body").addClass("pm");
  } else {
    $("body").removeClass("pm");
    $("body").addClass("am");
  }

  var mins = currTime.getMinutes();

  // set the hour 
  if (mins <= 30) {
    $("#" + hours).addClass("selected");
    if (mins > 2) {
      $("#past").addClass("selected");
      $("#minutes").addClass("selected");
    }
  } else {
    $("#" + (hours + 1)).addClass("selected");
    $("#to").addClass("selected");
  }

  // set the descriptive words
  if (mins % 5 == 0) {
    // do nothing
  } else if (mins % 5 < 3) {
    $("#around").addClass("selected");
  } else if (mins % 5 <= 4) {
    $("#almost").addClass("selected");
  }

  $("#oclock").addClass("selected");

  // set the minutes
  if (mins > 2) {
    var roundFive = roundToFive(mins);
    var minsWords = minsInWords[roundFive];
    
    // if the mins in words are "quarter" or "half", remove the selection on "minutes"
    if (minsWords == "quarter" || minsWords == "half") $("#minutes").removeClass("selected");
    
    if (Array.isArray(minsWords)) {
      $.each(minsWords, function(i, el) {
        $("#" + el).addClass("selected");
      });
    } else {
      $("#" + minsWords).addClass("selected");
    }
  }
}

5. Initialize the text clock.

$(document).ready(function(){
  setTime();
  // Function is called every 2 secs to update the UI
  setInterval(function(){ setTime(); }, 2000);
});

6. Style the text clock whatever you like.

body { color: lightgrey; }

.clock {
  width: 500px;
  overflow: hidden;
  font-size: 38px;
  margin: 0 auto;
}

.am {
  background-color: white;
  color: #F1F4F5;
}

.am .selected { color: #08DAF5; }

.pm {
  background-color: black;
  color: #757575;
}

.pm .selected { color: #FFE500; }

.clock .changing { display: inline; }

This awesome jQuery plugin is developed by aditibarbhai. For more Advanced Usages, please check the demo page or visit the official website.