171 lines
		
	
	
		
			4.4 KiB
		
	
	
	
		
			JavaScript
		
	
	
	
		
		
			
		
	
	
			171 lines
		
	
	
		
			4.4 KiB
		
	
	
	
		
			JavaScript
		
	
	
	
|  | /*! | ||
|  |  * jquery.tzineClock.js - Tutorialzine Colorful Clock Plugin | ||
|  |  * | ||
|  |  * Copyright (c) 2009 Martin Angelov | ||
|  |  * http://tutorialzine.com/
 | ||
|  |  * | ||
|  |  * Licensed under MIT | ||
|  |  * http://www.opensource.org/licenses/mit-license.php
 | ||
|  |  * | ||
|  |  * Launch  : December 2009 | ||
|  |  * Version : 1.0 | ||
|  |  * Released: Monday 28th December, 2009 - 00:00 | ||
|  |  */ | ||
|  | 
 | ||
|  | (function($){ | ||
|  | 	 | ||
|  | 	// A global array used by the functions of the plug-in:
 | ||
|  | 	var gVars = {}; | ||
|  | 
 | ||
|  | 	// Extending the jQuery core:
 | ||
|  | 	$.fn.tzineClock = function(opts){ | ||
|  | 	 | ||
|  | 		// "this" contains the elements that were selected when calling the plugin: $('elements').tzineClock();
 | ||
|  | 		// If the selector returned more than one element, use the first one:
 | ||
|  | 		 | ||
|  | 		var container = this.eq(0); | ||
|  | 	 | ||
|  | 		if(!container) | ||
|  | 		{ | ||
|  | 			try{ | ||
|  | 				console.log("Invalid selector!"); | ||
|  | 			} catch(e){} | ||
|  | 			 | ||
|  | 			return false; | ||
|  | 		} | ||
|  | 		 | ||
|  | 		if(!opts) opts = {};  | ||
|  | 		 | ||
|  | 		var defaults = { | ||
|  | 			/* Additional options will be added in future versions of the plugin. */ | ||
|  | 		}; | ||
|  | 		 | ||
|  | 		/* Merging the provided options with the default ones (will be used in future versions of the plugin): */ | ||
|  | 		$.each(defaults,function(k,v){ | ||
|  | 			opts[k] = opts[k] || defaults[k]; | ||
|  | 		}) | ||
|  | 
 | ||
|  | 		// Calling the setUp function and passing the container,
 | ||
|  | 		// will be available to the setUp function as "this":
 | ||
|  | 		setUp.call(container); | ||
|  | 		 | ||
|  | 		return this; | ||
|  | 	} | ||
|  | 	 | ||
|  | 	function setUp() | ||
|  | 	{ | ||
|  | 		// The colors of the dials:
 | ||
|  | 		var colors = ['orange','blue','green']; | ||
|  | 		 | ||
|  | 		var tmp; | ||
|  | 		 | ||
|  | 		for(var i=0;i<3;i++) | ||
|  | 		{ | ||
|  | 			// Creating a new element and setting the color as a class name:
 | ||
|  | 			 | ||
|  | 			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>' | ||
|  | 			); | ||
|  | 			 | ||
|  | 			// Appending to the container:
 | ||
|  | 			$(this).append(tmp); | ||
|  | 			 | ||
|  | 			// Assigning some of the elements as variables for speed:
 | ||
|  | 			tmp.rotateLeft = tmp.find('.rotate.left'); | ||
|  | 			tmp.rotateRight = tmp.find('.rotate.right'); | ||
|  | 			tmp.display = tmp.find('.display'); | ||
|  | 			 | ||
|  | 			// Adding the dial as a global variable. Will be available as gVars.colorName
 | ||
|  | 			gVars[colors[i]] = tmp; | ||
|  | 		} | ||
|  | 		 | ||
|  | 		// Setting up a interval, executed every 1000 milliseconds:
 | ||
|  | 		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); | ||
|  | 	} | ||
|  | 	 | ||
|  | 	function animation(clock, current, total) | ||
|  | 	{ | ||
|  | 		// Calculating the current angle:
 | ||
|  | 		var angle = (360/total)*(current+1); | ||
|  | 	 | ||
|  | 		var element; | ||
|  | 
 | ||
|  | 		if(current==0) | ||
|  | 		{ | ||
|  | 			// Hiding the right half of the background:
 | ||
|  | 			clock.rotateRight.hide(); | ||
|  | 			 | ||
|  | 			// Resetting the rotation of the left part:
 | ||
|  | 			rotateElement(clock.rotateLeft,0); | ||
|  | 		} | ||
|  | 		 | ||
|  | 		if(angle<=180) | ||
|  | 		{ | ||
|  | 			// The left part is rotated, and the right is currently hidden:
 | ||
|  | 			element = clock.rotateLeft; | ||
|  | 		} | ||
|  | 		else | ||
|  | 		{ | ||
|  | 			// The first part of the rotation has completed, so we start rotating the right part:
 | ||
|  | 			clock.rotateRight.show(); | ||
|  | 			clock.rotateLeft.show(); | ||
|  | 			 | ||
|  | 			rotateElement(clock.rotateLeft,180); | ||
|  | 			 | ||
|  | 			element = clock.rotateRight; | ||
|  | 			angle = angle-180; | ||
|  | 		} | ||
|  | 
 | ||
|  | 		rotateElement(element,angle); | ||
|  | 		 | ||
|  | 		// Setting the text inside of the display element, inserting a leading zero if needed:
 | ||
|  | 		clock.display.html(current<10?'0'+current:current); | ||
|  | 	} | ||
|  | 	 | ||
|  | 	function rotateElement(element,angle) | ||
|  | 	{ | ||
|  | 		// Rotating the element, depending on the browser:
 | ||
|  | 		var rotate = 'rotate('+angle+'deg)'; | ||
|  | 		 | ||
|  | 		if(element.css('MozTransform')!=undefined) | ||
|  | 			element.css('MozTransform',rotate); | ||
|  | 			 | ||
|  | 		else if(element.css('WebkitTransform')!=undefined) | ||
|  | 			element.css('WebkitTransform',rotate); | ||
|  | 	 | ||
|  | 		// A version for internet explorer using filters, works but is a bit buggy (no surprise here):
 | ||
|  | 		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) |