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