Place to place any code snippets, completed games, or even uncompleted games for IR users to use.
			
		
		
			
				
								Chris 							 
									
		Posts:  1581 Joined:  Wed Sep 30, 2009 7:22 pm 
		
						
						
													
							
						
									
						Post 
					 
								by Chris  Wed Jun 06, 2012 11:44 am 
			
			
			
			
			Code: Select all 
<!DOCTYPE html>
<html>
	<head>
		<title>HTML Metro Loading Bar</title>
		<style type="text/css">
		.loading-bar .block {
			background: #00F;
		}
		</style>
	<head>
	<body>
		<script type="text/javascript">
		LoadingBar = function(blocks)
		{
			this.numBlocks = blocks == undefined || typeof blocks != 'number' ? 5 : blocks;
			this.element = document.createElement('div');
			this.element.className = 'loading-bar';
			this.element.style.width = window.innerWidth + 'px';
			this.element.style.position = 'absolute';
			this.element.style.left = '0';
			this.element.style.right = '0';
			this.element.style.overflow = 'hidden';
			this.element.style.height = '5px';
			this.slowDownRange = Math.floor((parseInt(this.element.style.width)/3)/2);
			this.slowDownAreaStart = Math.floor( parseInt(this.element.style.width)/2 - this.slowDownRange);
			this.slowDownAreaStop = Math.floor( parseInt(this.element.style.width)/2 + this.slowDownRange);
			this.blocks = [];
			for( var i = 0; i < this.numBlocks; i++ )
			{
				this.blocks.push(new LoadingBarBlock(this));
				this.element.appendChild(this.blocks[i].element);
			}
			this.start = function()
			{
				for( var i in this.blocks )
				{
					var _this = this,
						_waitTime = this.slowDownRange*i,
						_i = i;
					(function(me, waitTime, i){
						
						var _this = me,
							_waitTime = waitTime,
							_i = i;
						setTimeout( function()
						{
							_this.blocks[_i].element.style.left = (_i*-parseInt(_this.blocks[_i].element.style.height)/2) + 'px';
							_this.blocks[_i].element.style.display = 'block';
							_this.blocks[_i].move();
						}, _waitTime);
					})(_this,_waitTime,_i)
				}
			}
			this.stop = function()
			{
				for( var i in this.blocks )
				{
					clearTimeout(this.blocks[i].moveTimeout);
					this.blocks[i].element.style.display = 'none';
				}
			}
		}
		LoadingBarBlock = function(loadingBar)
		{
			this.container = loadingBar;
			this.element = document.createElement('div');
			this.element.className = 'block';
			this.element.style.position = 'absolute';
			this.element.style.height = this.container.element.style.height;
			this.element.style.width = this.container.element.style.height;
			
			this.moveTimeout = null;
			this.move = function()
			{
				if( parseInt(this.element.style.left) >= this.container.slowDownAreaStart && parseInt(this.element.style.left) <= this.container.slowDownAreaStop )
				{
					this.displacementSpeed = 3;
				}
				else
				{
					this.displacementSpeed = 6;
				}
				this.element.style.left = (parseInt(this.element.style.left) + this.displacementSpeed) + 'px';
				if( parseInt(this.element.style.left) >= parseInt(this.container.element.style.width) ) this.element.style.left = '0px';
				var _this = this;
				this.moveTimeout = setTimeout( function(){ _this.move() }, 10);
			}
		}
		var lol = new LoadingBar(5);
		document.body.appendChild(lol.element);
		lol.start();
		</script>
	</body>
</html>http://pastebin.com/wkFPvT2e Fighting for peace is declaring war on war. If you want peace be peaceful.
			
						 
		 
				
		
		 
	 
				
		
		
			
				
								Chris 							 
									
		Posts:  1581 Joined:  Wed Sep 30, 2009 7:22 pm 
		
						
						
													
							
						
									
						Post 
					 
								by Chris  Thu Jun 07, 2012 10:43 am 
			
			
			
			
			Improved:
Code: Select all 
<!DOCTYPE html>
<html>
    <head>
        <title>HTML Metro Loading Bar</title>
        <style type="text/css">
        body { background: #000 ;}
        .block {
            background: #0fF;
            height: 5px;
            width: 5px;
        }
        </style>
    <head>
    <body>
        <script type="text/javascript">
		LoadingBar = function (args /* { element : document element, numBlocks : integer } */) {
		    var args = args == undefined ? { numBlocks: this.numBlocks, element: document.createElement('div')} : args;
		    this.numBlocks = args.numBlocks == undefined ? this.numBlocks : typeof args.numBlocks == 'number' ? args.numBlocks : this.numBlocks;
		    this.element = args.element == undefined ? document.createElement('div') : args.element;
		    this.element.className = 'loading-bar';
		    this.element.style.position = 'absolute';
		    this.element.style.left = '0';
		    this.element.style.right = '0';
		    this.element.style.overflow = 'hidden';
		    this.setDimensions();
		    var _this = this;
		    window.addEventListener('resize', function () { _this.setDimensions() });
		    return this;
		}
		LoadingBar.prototype = {
		    constructor: LoadingBar,
		    interval: null,
		    loops: 0,
		    loopPauseDuration: 1000,
		    element: null,
		    numBlocks: 5,
		    animationSpeed: 10,
		    blockDisplacemenetSpeed: 6,
		    slowDownPercentage: 50,
		    slowDownRange: 0,
		    slowDownAreaStart: 0,
		    slowDownAreaStop: 0,
		    setDimensions: function () {
		        this.element.style.width = window.innerWidth + 'px';
		        this.slowDownRange = Math.floor((parseInt(this.element.style.width) / 3));
		        this.slowDownAreaStart = this.slowDownRange;
		        this.slowDownAreaStop = this.slowDownRange * 2;
		    },
		    addBlock: function () {
		        var block = document.createElement('div');
		        block.className = 'block';
		        block.style.position = 'fixed';
		        block.style.display = 'block';
		        this.element.appendChild(block);
		        return block;
		    },
		    removeBlock: function (index) {
		        this.element.removeChild(this.element.getElementsByClassName('block')[index]);
		    },
		    clearBlocks: function () {
		        while (this.element.hasChildNodes()) {
		            this.element.removeChild(this.element.lastChild);
		        }
		    },
		    start: function () {
		        this.reset();
		        for (var i = 0; i < this.numBlocks; i++) {
		            this.addBlock().style.left = Math.floor(-1 * (1 + i) * (this.slowDownRange / this.numBlocks)) + 'px';
		        }
		        var pause = this.loops == 0 ? 0 : this.loopPauseDuration,
		            _this = this;
		        this.loops++;
		        this.interval = setTimeout(function () { _this.animate(); }, pause);
		        return this;
		    },
		    animate: function () {
		        var _this = this,
		            blocks = this.element.getElementsByClassName('block');
		        if (blocks.length == 0) return this.start();
		        for (var i in blocks) {
		            if (typeof blocks[i] == 'object') {
		                var x = parseInt(blocks[i].style.left),
		                    displacementSpeed = this.blockDisplacemenetSpeed;
		                if (x >= this.slowDownAreaStart && x <= this.slowDownAreaStop) {
		                    displacementSpeed = Math.floor(displacementSpeed / (100 / this.slowDownPercentage));
		                }
		                blocks[i].style.left = (x + displacementSpeed) + 'px';
		                if (parseInt(blocks[i].style.left) >= parseInt(this.element.style.width)) {
		                    this.removeBlock(i)
		                }
		            }
		        }
		        this.interval = setTimeout(function () { _this.animate(); }, _this.animationSpeed);
		    },
		    reset: function()
		    {
		        this.clearBlocks();
		        clearTimeout(this.interval);
		    },
		    stop: function () {
		        this.loops = 0;
		        this.clearBlocks();
		        clearTimeout(this.interval);
		    }
		}
        
        document.body.appendChild(new LoadingBar().start().element);
        </script>
    </body>
</html>http://pastebin.com/dFDfD8yJ Fighting for peace is declaring war on war. If you want peace be peaceful.
			
						 
		 
				
		
		 
	 
				
				
		
		
			
				
								Jackolantern 							 
									
		Posts:  10891 Joined:  Wed Jul 01, 2009 11:00 pm 
		
						
						
													
							
						
									
						Post 
					 
								by Jackolantern  Thu Jun 07, 2012 9:30 pm 
			
			
			
			
			I had to try it out (having a Windows Phone and all lol). Very nice! This could be cool wrapped up in a module to use as a page or AJAX loading animation 
The indelible lord of tl;dr
			
						 
		 
				
		
		 
	 
				
		
		
			
				
								Chris 							 
									
		Posts:  1581 Joined:  Wed Sep 30, 2009 7:22 pm 
		
						
						
													
							
						
									
						Post 
					 
								by Chris  Fri Jun 08, 2012 7:58 am 
			
			
			
			
			I'm working on a Metro UI extension for SignalR for work without WinJS. Going to make it all open source.
			
			
									
						
							Fighting for peace is declaring war on war. If you want peace be peaceful.
			
						 
		 
				
		
		 
	 
				
		
		
			
				
								Jackolantern 							 
									
		Posts:  10891 Joined:  Wed Jul 01, 2009 11:00 pm 
		
						
						
													
							
						
									
						Post 
					 
								by Jackolantern  Sat Jun 09, 2012 10:44 pm 
			
			
			
			
			Very nice! Metro is coming in a big way to the computing scene, and it represents the biggest change in the Windows UI since Windows 95. Developers and designers are going to be scrambling when it goes global to create packages to integrate into the Metro look, so now is a good time to launch a project to do just that and get a jump on it  
The indelible lord of tl;dr