/
coolfill.js
55 lines (48 loc) · 1.51 KB
/
coolfill.js
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
(function($){
$.fn.coolFill = function(text, opt){
var settings = {
speed: 100,
queueName: 'coolFill',
coolChars: ['$', '%', '&', '#', '@'],
coolness: 3
};
if(opt){
$.extend(settings, opt);
}
this.each(function(){
var $this = $(this);
$this.clearQueue(settings.queueName);
var scramble = function(shown){
var text = $(shown).text();
var scrambleFunc = function(){
var coolchar = settings.coolChars[ Math.floor(Math.random() * settings.coolChars.length)];
$(shown).text(text + coolchar);
};
for(var i=0; i < settings.coolness; i++){
setTimeout(scrambleFunc, (settings.speed / settings.coolness * i));
}
};
var settext = function(i){
return function(next){
$this.html('');
var hidden = document.createElement('span');
var shown = document.createElement('span');
$(hidden).css('visibility', 'hidden').text( text.substring(i+1, text.length) );
$(shown).text( text.substring(0, i) );
scramble(shown);
$this.append(hidden, shown);
next();
};
};
for(var i = 0; i <= text.length; i++){
$this.queue(settings.queueName, settext(i));
$this.delay(settings.speed, settings.queueName);
}
$this.queue(settings.queueName, function(){
$this.html('').text(text);
});
$this.dequeue(settings.queueName);
});
return this;
};
})(jQuery);