github.com/kardianos/nomad@v0.1.3-0.20151022182107-b13df73ee850/website/source/assets/javascripts/app/DotLockup.js (about)

     1  (function(){
     2  
     3  DotLockup = Base.extend({
     4  
     5  	$keyWrap: null,
     6  	$keys: null,
     7  
     8  	constructor: function(){
     9  		var _this = this;
    10  
    11  		_this.$keyWrap = $('.keys');
    12  		_this.$keys = $('.keys span');
    13  
    14  		//(3000)
    15  
    16  		_this.addEventListeners();
    17  		_this.animateFull()
    18  			.then(_this.animateOff.bind(this))
    19  			.then(_this.animateFull.bind(this))
    20  			.then(_this.animatePress.bind(this))
    21  			.then(_this.resetKeys.bind(this));
    22  	},
    23  
    24  	addEventListeners: function(){
    25  		var _this = this;
    26  	},
    27  
    28  	animateFull: function(uberDelay){
    29  		var _this = this,
    30  			uberDelay = uberDelay || 0,
    31  			deferred = $.Deferred();
    32  
    33  		setTimeout( function(){
    34  			_this.updateEachKeyClass('full', 'off', 1000, 150, deferred.resolve);
    35  		}, uberDelay)
    36  
    37  		return deferred;
    38  	},
    39  
    40  	animateOff: function(){
    41  		var deferred = $.Deferred();
    42  
    43  		this.updateEachKeyClass('full off', '', 1000, 150, deferred.resolve, true);
    44  		
    45  		return deferred;
    46  	},
    47  
    48  	animatePress: function(){
    49  		var _this = this,
    50  			deferred = $.Deferred(),
    51  			len = _this.$keys.length,
    52  			presses = _this.randomNumbersIn(len),
    53  			delay = 250,
    54  			interval = 600;
    55  
    56  		for(var i=0; i < len; i++){
    57  			(function(index){
    58  				setTimeout(function(){
    59  					_this.$keys.eq(presses[index]).addClass('press');
    60  					if(index == len -1 ){
    61  						deferred.resolve();
    62  					}				
    63  				}, delay)
    64  
    65  				delay += interval;
    66  			}(i))
    67  		}
    68  
    69  		return deferred;
    70  	},
    71  
    72  	resetKeys: function(){
    73  		var _this = this,
    74  			len = _this.$keys.length,
    75  			delay = 2500,
    76  			interval = 250;
    77  
    78  		setTimeout(function(){
    79  			_this.$keys.removeClass('full press');	
    80  		}, delay)
    81  		/*for(var i=0; i < len; i++){
    82  			(function(index){
    83  				setTimeout(function(){
    84  					_this.$keys.eq(index).removeClass('full press');	
    85  				}, delay)
    86  
    87  				delay += interval;
    88  			}(i))
    89  		}*/		
    90  	},
    91  
    92  	updateEachKeyClass: function(clsAdd, clsRemove, delay, interval, resolve, reverse){
    93  		var delay = delay;
    94  		this.$keys.each(function(index){
    95  			var span = this;
    96  			var finishIndex = (reverse) ? 0 : 9; // final timeout at 0 or 9 depending on if class removal is reversed on the span list
    97  			setTimeout( function(){ 
    98  				$(span).removeClass(clsRemove).addClass(clsAdd);
    99  				if(index == finishIndex ){
   100  					resolve();
   101  				}
   102  			}, delay);
   103  
   104  			if(reverse){
   105  				delay -= interval;
   106  			}else{
   107  				delay += interval;
   108  			}
   109  		})		
   110  
   111  	},
   112  
   113  	randomNumbersIn: function(len){
   114  		var arr = [];
   115  		while(arr.length < len){
   116  		  	var randomnumber=Math.floor(Math.random()*len)
   117  		  	var found=false;
   118  		  	for(var i=0;i<arr.length;i++){
   119  				if(arr[i]==randomnumber){found=true;break}
   120  		  	}
   121  		  	if(!found)arr[arr.length]=randomnumber;
   122  		}
   123  		return arr;
   124  	}
   125  
   126  });
   127  
   128  window.DotLockup = DotLockup;
   129  
   130  })();