Demo: Pomodoro Clock
HTML Code:
<body>
<div class="header">
<h1>Pomodoro Timer</h1>
<h2>A Free Code Camp Student Project</h2>
</div>
<div class=container>
<div class=controls>
<div class="breakControl">
<div class="breakUp btn btn-primary">⇧</div>
<div class="breakTime">5</div>
<div class="breakDown btn btn-primary">⇩</div>
</div>
<div class="sessionControl">
<div class="sessionUp btn btn-primary">⇧</div>
<div class="sessionTime">5</div>
<div class="sessionDown btn btn-primary">⇩</div>
</div>
</div>
</div>
<div class="clock">
<div class="clockDisplay btn">Timer</div>
</div>
<h3 class="intervalType">Select Break and Session Intervals - Click On Timer to Start</h3>
</body>
CSS Code:
body{
  text-align: center;
  font-weight: bold;
  font-family:"Garamond";
  background-image: url(http://wallup.net/wp-content/uploads/2016/01/167565-abstract-dark-black_background-digital_art-artwork.png);
  background-size: 100%;
}
.header{
  margin-left: auto;
  margin-right: auto;
  margin-bottom: 80px;
    color:white;
}
.controls{  
  z-index: 2;
  position: absolute;
    top: 0;
    left: 0;
    right: 0;
    bottom: 0;
    margin: auto;
  width: 300px;
  padding-bottom:20px;
  top: 40px;
  color: white;  
}
.sessionControl{
  cursor:pointer;
  float:right;
  padding-top: 5px;  
}
.breakControl{
  cursor:pointer;
  float:left;
  padding-top: 5px;
}
.breakUp{
  box-shadow: inset -1px -6px 12px 1px blue;
}
.breakDown{
  box-shadow: inset -1px -6px 12px 1px blue;
}
.sessionUp{
  box-shadow: inset -1px -6px 12px 1px blue;
}
.sessionDown{
  box-shadow: inset -1px -6px 12px 1px blue;
}
.sessionLabel{
  padding-top: 5px;
}
.breakLabel{
  padding-top: 5px;
}
.clock{
    margin: auto;
   position:relative;
   bottom:20px;
  top: 20px;
//  z-index: 1;
  width: 370px;
  height: 150px;
  background: #99a3d8;
  box-shadow: 1px 1px 20px 5px #b1b6ce, inset -1px -6px 12px 1px #ced3ef;
  border-radius: 150px;
  padding-top: 40px;
}
.clockDisplay{
  cursor:pointer;
  width: 200px;
  height: 70px;
  display: inline-block;
  font-size: 36px;
  font-weight: bold;
  background: yellow;
  color: black;
  box-shadow: inset -1px -1px 6px 1px yellow;
}
.intervalType{
  font-size: 18px;
  font-weight: bold;
  color: white;
  padding-top: 40px;
}
JavaScript Code:
$(document).ready(function() {
var buzzer = new Audio('http://dragoncoin.com/piano/bellsound.mp3');
  
$clockDisplay=$(".clockDisplay"); 
$controls=$(".controls");  
$breakUp=$(".breakUp");
$breakDown=$(".breakDown"); 
$breakTime=$(".breakTime");
$sessionUp=$(".sessionUp"); 
$sessionDown=$(".sessionDown"); 
$sessionTime=$(".sessionTime");
$intervalType=$(".intervalType");
$header=$(".header");  
  
  var flag=false;
  var breakTime=parseInt($breakTime.html());
  var sessionTime=parseInt($sessionTime.html()); 
  var clockDisplay=parseInt($clockDisplay.html()); 
  var count, breakCount;
  var counter, counter2;
// Start the count-down when the clock is clicked  
  $clockDisplay.click (function(){
    if (flag==false){
      count=sessionTime*60;
      startTimer();
    } else {
//      breakCount=breakTime;
      stopTimer();
    }
  })
  
  function startTimer(){
    buzzer.play();
    $header.hide();
    $intervalType.html("Session in Progress...");
      $clockDisplay.css("background",'green');
//      buzzer.play();
      flag=true;
      $controls.hide();
    counter=setInterval(timer,1000);
    function timer(){
      count-=1;
      if (count==0){
        clearInterval(counter);
        breakCount=breakTime*60;
        breakTimer();
      }
//      $clockDisplay.html(count);
      updateDisplay(count);
    } 
  }
  
  function stopTimer(){
    buzzer.play();
    count=sessionTime;
    breakCount=breakTime;
    $intervalType.html("");
    $clockDisplay.css("background",'yellow');
    updateDisplay(sessionTime*60);    
    $controls.show();
//    $header.show();
    clearInterval(counter);
    clearInterval(counter2);
    flag=false;
  }
  
  function breakTimer(){
    buzzer.play();
    $intervalType.html("Break Time In Progress...");
    $clockDisplay.css("background",'yellow');
    counter2=setInterval(timer,1000);
    function timer(){
      breakCount-=1;
      if (breakCount==0){
        clearInterval(counter2);
        count=sessionTime*60;
        startTimer();
      }
      updateDisplay(breakCount);
    }
  }
  
// Controls for Session Length
$sessionDown.click(function() {
  if (+$sessionTime.text() > 5) {
    clockDisplay=sessionTime-=5;
    count=sessionTime*60;
    $sessionTime.text(sessionTime);
    $clockDisplay.html("Sessions");
//    $clockDisplay.text(clockDisplay);
  }
});
$sessionUp.click(function() {
  sessionTime+=5;
  count=sessionTime*60;
  $sessionTime.text(sessionTime);
  $clockDisplay.html("Sessions");
//  $clockDisplay.text(clockDisplay);
});
  
  // Controls for Break Length
$breakDown.click(function() {
  if (+$breakTime.text() > 5) {
    breakTime-=5;
    breakCount=breakTime*60;
    $breakTime.html(breakTime);
    $clockDisplay.html("Breaks");
  }
});
$breakUp.click(function() {
  breakTime+=5;
  breakCount=breakTime*60;
  $breakTime.html(breakTime);
  $clockDisplay.html("Breaks");
});
// This function displays a formatted time value on screen
function updateDisplay(t) {
  var hours = Math.floor(t / 3600);
  t -= hours * 3600;
  var minutes = Math.floor(t / 60);
  t -= minutes * 60;
  var seconds = Math.floor(t);
  var clock = formatDigit(hours) + ':' + formatDigit(minutes) + ':' + formatDigit(seconds);
  $clockDisplay.html(clock);
//  console.log(clock);
}  
// format the time to always show two digits
function formatDigit(x){
  return ("0" + x).slice(-2);
}  
  
}) // Ends document.ready.function
                        
    		Categories: