Vou dar uma help de como criar uma classe javascript com costrutor, atributos e metodos usando coffeescript.
Para o exemplo, vamos criar uma classe Spinner. Vamos crar uma imagem de carregamento nesse site:
No site selecione a opção PNG sprite, crie seu spinner e faça o download da imagem. Na documentação tem os exemplos de css e também um link para o javascript, que deve ser algo mais ou menos assim:
(function() {
SpriteSpinner = function(el, options){
var self = this,
img = el.children[0];
this.interval = options.interval || 10;
this.diameter = options.diameter || img.width;
this.count = 0;
this.el = el;
img.setAttribute("style", "position:absolute");
el.style.width = this.diameter+"px";
el.style.height = this.diameter+"px";
return this;
};
SpriteSpinner.prototype.start = function(){
var self = this,
count = 0,
img = this.el.children[0];
this.el.style.display = "";
self.loop = setInterval(function(){
if(count == 19){
count = 0;
}
img.style.top = (-self.diameter*count)+"px";
count++;
}, this.interval);
$(this.el).parent().css('display', 'block')
};
SpriteSpinner.prototype.stop = function(){
clearInterval(this.loop);
this.el.style.display = "none";
};
document.SpriteSpinner = SpriteSpinner;
})();
E com base nesse código vamos criar nossa elegante classe usando coffee:
class SpriteSpinner
constructor: (options) ->
@el = $(options.el)[0]
img = @el.children[0]
@interval = options.interval || 10
@diameter = options.diameter || img.width
@count = 0
img.setAttribute "style", "position:absolute"
@el.style.width = @diameter + "px";
@el.style.height = @diameter + "px";
start: ->
count = 0
self = @
img = @el.children[0]
@el.style.display = ""
@loop = setInterval ( ->
count = 0 if count == 19
img.style.top = (-self.diameter * count) + "px"
count++
return
), @interval
$(@.el).parent().css 'display', 'block'
stop: ->
clearInterval @loop
@el.style.display = "none"
Detalhes:
No constructor você pode definir os atributos da classe usando o @, que serão automágicamente criados na complicação para js.
Para usar
spinner = new SpriteSpinner {interval: 50, el: '#spinnerWrapper'}
spinner.start()
setInterval( ->
spinner.stop()
, 10000)
Para mais detalhes sobre classes no coffe visite o site http://coffeescriptcookbook.com/chapters/classes_and_objects/class-methods-and-instance-methods
Até a próxima!
Nenhum comentário:
Postar um comentário