もんたメソッドをモジュール化した。
紙を剥がす感じのもんたメソッド - flowerhill’s Unionで書いた物が、酷く中途半端だったので続きを書いた。とりあえずソース。
var Monta = function(id){ this.elem = document.getElementById(id); this.plusCount = 0; }; Monta.SHOW_SPEED = 15; Monta.FADE_SPEED = 50; Monta.BACK_GROUND = [ "#000", "#111", "#222", "#333", "#444", "#555", "#666", "#777", "#888", "#999", "#aaa", "#bbb", "#ccc", "#ddd", "#eee", "#fff" ]; Monta.addEventListener=function(element,name,observer){ if (element.addEventListener) { element.addEventListener(name, observer,true); } else if (element.attachEvent) { element.attachEvent('on' + name, observer); } } Monta.prototype={ initialize : function(id){ this.method_content = this.elem.innerHTML; this.elem.innerHTML = ''; this.create_content(this.method_content); this.spans = this.elem.getElementsByTagName('span'); }, create_content : function(method_content){ for (var i=0; i<method_content.length; i++) { var span = document.createElement('span'); span.className='monta'; span.innerHTML=method_content.charAt(i); this.elem.appendChild(span); } }, monta_show : function (){ if (this.plusCount==this.spans.length)return; if (this.spans[this.plusCount].className == 'monta') { this.spans[this.plusCount].style.backgroundColor='transparent'; } this.plusCount++; var self = this; setTimeout(function(){self.monta_show.apply(self)},Monta.SHOW_SPEED); }, monta_reverse : function(){ this.minusCount--; if (this.minusCount < 0 )return; if (this.spans[this.minusCount].className == 'monta') { this.spans[this.minusCount].style.backgroundColor='transparent'; } var self = this; setTimeout(function(){self.monta_reverse.apply(self)},Monta.SHOW_SPEED); }, monta_fade : function(){ if(this.plusCount==Monta.BACK_GROUND.length)return; this.elem.style.backgroundColor = Monta.BACK_GROUND[this.plusCount]; this.plusCount++; var self = this; setTimeout(function(){self.monta_fade.apply(self)},Monta.FADE_SPEED); }, fade : function(){ this.elem.style.background = '#000'; var self = this; var listner = function(){self.monta_fade.apply(self);} Monta.addEventListener(this.elem,'click',listner,true); }, reverse : function(){ this.initialize(); this.minusCount = this.spans.length; var self = this; var listner = function(){self.monta_reverse.apply(self);} Monta.addEventListener(this.elem,'click',listner,true); }, show : function(){ this.initialize(); var self = this; var listner = function(){self.monta_show.apply(self);} Monta.addEventListener(this.elem,'click',listner,true); } }
ここまでをMonta.jsとして保存。
<html> <head> <style> div.mino { padding: 0.5em; border : outset 1px; color : #000; } span.monta { background-color: #000; color:#000; } </style> <script type="text/javascript" src="Monta.js"></script> </head> <body> <div class="mino"> もんたメソッドのモジュールの見え方は3種類。<br> 一つ目は<span id='show'>紙をめくる様にみえる</span>という見せ方。<br> 二つ目は<span id='reverse'>逆からアシスタントにめくって貰う様にみえる</span>という見せ方。<br> 三つ目は<span id='fade'>文字列を隠していた物が、薄く消えていく</span>という見せ方。<br> <br> お好きな見せ方でどうぞ。 </div> </body> </html> <script> var mino = new Monta('show'); mino.show(); var monta = new Monta('reverse'); monta.reverse(); var minomonta = new Monta('fade'); minomonta.fade(); </script>
使い方はhtmlを作って見てもらえば早いと思うけど、みのもんたな見せ方をしたいところをspanタグで囲んでidをつける。でMontaをnewする引数にそのidを渡す。で見せ方は、showかreverseかfadeを選んで呼び出すと、身のもんたな見せ方が出来ます。同じidをつけるとバグります。(IEでの見え方がこれはこれで面白いので放置)
span.montaなcssを作っておくのを忘れずに。動作確認はIE6,7、FireFox2.0でしました。
元々は、弾さんが404 Blog Not Found:javascript+CSS - お手軽もんたメソッドでやっていた物を、ちょっと書き換えました。
これを使うと学生時代にやってたマーカーで線を引いて、赤い下敷きで隠しながらのお勉強ができるなぁ、なんて思った。