まず[1ビット]ボタンをクリック、その後[2ビット]、[3ビット]、...と進んでください。
0 |
00 |
000 |
0000 |
00000 |
組み合わせのパターンは全部を自分で書き出すことで、簡単に理解できるものですが、どうも頭の中だけで考えてしまう人が多いようです。ならば、アニメーションをつかって書き方を示してやろうと考えたわけです。
tableは2行5列で変わりませんが、内容を表示 する/しない を切り替えます。
button id=bb1 1ビット |
button id=bb2 2ビット |
button id=bb3 3ビット |
button id=bb4 4ビット |
button id=bb5 5ビット |
p id=b1 00 01 |
p id=b2 00 01 10 11 |
p id=b3 000 001 010 011 100 101 ... |
p id=b4 0000 0001 0010 0011 0100 0101 .... |
p id=b5 00000 00001 00010 00011 00100 00101 ..... |
全体の構造がtableで各td(セル)にはbutton要素とp要素が入っていて、それぞれidがついています。
idにより対象を変数で呼べるようにします。たとえばid=b2ならば、
tdb2 = document.getElementById("b2");
これを表示しないようにするには、
tdb2.setAttribute("style","display:none;");
再び表示するには
tdb2.setAttribute("style","display:block;");
p要素でなくbutton要素なら、blockよりもinlineがいいでしょう。
btnb2.setAttribute("style","display:inline;");
書かれている内容はそのままに、文字の色を変えます。白にすると見えなくなります。
2ビットの欄を例に考えてみます。動作開始前をstate0として、state4までの状態があります。
state0 | state1 | state2 | state3 | state4 | ||||
00 |
⇨ |
00 |
⇨ |
00 |
⇨ |
00 |
⇨ |
00 |
status1に見えている 01 は、ずっと黒です。これを c1 とします
部分\状態 | state0 | state1 | state2 | state3 | state4 |
c1 | 黒 | 黒 | 黒 | 黒 | 黒 |
赤い 0 は次のように色が変化します。これを o とします。0 からの連想です。
部分\状態 | state0 | state1 | state2 | state3 | state4 |
o | 黒 | 白 | 赤 | 赤 | 赤 |
status3で見えてくる 01 は、ずっと黒です。次のように色が変化します。c2 とします。
部分\状態 | state0 | state1 | state2 | state3 | state4 |
c2 | 黒 | 白 | 白 | 黒 | 黒 |
青い 1 は次のように色が変化します。これを l とします。1 からの連想です。
部分\状態 | state0 | state1 | state2 | state3 | state4 |
l | 黒 | 白 | 白 | 白 | 青 |
そこで、cssに次のように設定します。
.state0 .c1{color:#000;} .state0 .c2{color:#000;} .state0 .o {color:#000;} .state0 .l {color:#000;} .state1 .c1{color:#000;} .state1 .c2{color:#fff;} .state1 .o {color:#fff;} .state1 .l {color:#fff;} .state2 .c1{color:#000;} .state2 .c2{color:#fff;} .state2 .o {color:#f00;} .state2 .l {color:#fff;} .state3 .c1{color:#000;} .state3 .c2{color:#000;} .state3 .o {color:#f00;} .state3 .l {color:#fff;} .state4 .c1{color:#000;} .state4 .c2{color:#000;} .state4 .o {color:#f00;} .state4 .l {color:#06f;}
この指定を説明すると、例えば、.state2 .o {color:#f00;} は、class=state2 の子要素が class=o であれば文字色は赤ということです。(子だけではなく、孫でもよいので、正確には子孫です)
色を換えたい文字列にspanなどのタグをつけ、 c1,c2,o,l とclass分けしておきます。これが子要素になります。
クラス分けした要素の親要素をclass=status0としておき、この親要素のclassだけをjavascriptで1秒毎に変更していきます。
以下が、2ビットのアニメーションの主要部分です。ボタンのクリックで、ac2()に来ます。2ビットの部分を表示したあと、classをstate1にして setTimeout()します。これは1秒(1000ミリ秒)後にac2b()を呼び出します。ac2b()はstatus2 に変更したあと、setTimeout()します。これは1秒(1000ミリ秒)後にac2c()を呼び出します。こうして1秒毎に遷移していきます。
function ac2(){ tdb2.setAttribute("style","display:block;"); tdb2.setAttribute("class","state1"); setTimeout("ac2b()",1000); } function ac2b(){ tdb2.setAttribute("class","state2"); setTimeout("ac2c()",1000); } function ac2c(){ tdb2.setAttribute("class","state3"); setTimeout("ac2d()",1000); } function ac2d(){ tdb2.setAttribute("class","state4"); }
window.onload = function(){ btnb3 = document.getElementById("bb3"); btnb4 = document.getElementById("bb4"); btnb5 = document.getElementById("bb5"); tdb2 = document.getElementById("b2"); tdb3 = document.getElementById("b3"); tdb4 = document.getElementById("b4"); tdb5 = document.getElementById("b5"); } function ac1(){ btnb3.setAttribute("style","display:none;"); btnb4.setAttribute("style","display:none;"); btnb5.setAttribute("style","display:none;"); tdb2.setAttribute("style","display:none;"); tdb3.setAttribute("style","display:none;"); tdb4.setAttribute("style","display:none;"); tdb5.setAttribute("style","display:none;"); } function ac2(){ btnb3.setAttribute("style","display:none;"); btnb4.setAttribute("style","display:none;"); btnb5.setAttribute("style","display:none;"); tdb2.setAttribute("style","display:block;"); tdb2.setAttribute("class","state1"); tdb3.setAttribute("style","display:none;"); tdb4.setAttribute("style","display:none;"); tdb5.setAttribute("style","display:none;"); setTimeout("ac2b()",1000); } function ac2b(){ tdb2.setAttribute("class","state2"); setTimeout("ac2c()",1000); } function ac2c(){ tdb2.setAttribute("class","state3"); setTimeout("ac2d()",1000); } function ac2d(){ tdb2.setAttribute("class","state4"); btnb3.setAttribute("style","display:inline;"); } function ac3(){ btnb4.setAttribute("style","display:none;"); btnb5.setAttribute("style","display:none;"); tdb2.setAttribute("class","state0"); tdb3.setAttribute("style","display:block;"); tdb3.setAttribute("class","state1"); tdb4.setAttribute("style","display:none;"); tdb5.setAttribute("style","display:none;"); setTimeout("ac3b()",1000); } function ac3b(){ tdb3.setAttribute("class","state2"); setTimeout("ac3c()",1000); } function ac3c(){ tdb3.setAttribute("class","state3"); setTimeout("ac3d()",1000); } function ac3d(){ tdb3.setAttribute("class","state4"); btnb4.setAttribute("style","display:inline;"); } function ac4(){ btnb5.setAttribute("style","display:none;"); tdb2.setAttribute("class","state0"); tdb3.setAttribute("class","state0"); tdb4.setAttribute("style","display:block;"); tdb4.setAttribute("class","state1"); tdb5.setAttribute("style","display:none;"); setTimeout("ac4b()",1000); } function ac4b(){ tdb4.setAttribute("class","state2"); setTimeout("ac4c()",1000); } function ac4c(){ tdb4.setAttribute("class","state3"); setTimeout("ac4d()",1000); } function ac4d(){ tdb4.setAttribute("class","state4"); btnb5.setAttribute("style","display:inline"); } function ac5(){ tdb2.setAttribute("class","state0"); tdb3.setAttribute("class","state0"); tdb4.setAttribute("class","state0"); tdb5.setAttribute("style","display:block;"); tdb5.setAttribute("class","state1"); setTimeout("ac5b()",1000); } function ac5b(){ tdb5.setAttribute("class","state2"); setTimeout("ac5c()",1000); } function ac5c(){ tdb5.setAttribute("class","state3"); setTimeout("ac5d()",1000); } function ac5d(){ tdb5.setAttribute("class","state4"); }
<table class="bits"> <tr> <td><button type="button" id="bb1" onclick="ac1()">1ビット</button></td> <td><button type="button" id="bb2" onclick="ac2()">2ビット</button></td> <td><button type="button" id="bb3" onclick="ac3()">3ビット</button></td> <td><button type="button" id="bb4" onclick="ac4()">4ビット</button></td> <td><button type="button" id="bb5" onclick="ac5()">5ビット</button></td> </tr> <tr> <td><p> 0<br> 1<br> </p></td> <td><p id="b2"> <span class="o">0</span><span class="c1">0</span><br> <span class="o">0</span><span class="c1">1</span><br> <span class="l">1</span><span class="c2">0</span><br> <span class="l">1</span><span class="c2">1</span><br> </p></td> <td><p id="b3"> <span class="o">0</span><span class="c1">00</span><br> <span class="o">0</span><span class="c1">01</span><br> <span class="o">0</span><span class="c1">10</span><br> <span class="o">0</span><span class="c1">11</span><br> <span class="l">1</span><span class="c2">00</span><br> <span class="l">1</span><span class="c2">01</span><br> <span class="l">1</span><span class="c2">10</span><br> <span class="l">1</span><span class="c2">11</span><br> </p></td> <td><p id="b4"> <span class="o">0</span><span class="c1">000</span><br> <span class="o">0</span><span class="c1">001</span><br> <span class="o">0</span><span class="c1">010</span><br> <span class="o">0</span><span class="c1">011</span><br> <span class="o">0</span><span class="c1">100</span><br> <span class="o">0</span><span class="c1">101</span><br> <span class="o">0</span><span class="c1">110</span><br> <span class="o">0</span><span class="c1">111</span><br> <span class="l">1</span><span class="c2">000</span><br> <span class="l">1</span><span class="c2">001</span><br> <span class="l">1</span><span class="c2">010</span><br> <span class="l">1</span><span class="c2">011</span><br> <span class="l">1</span><span class="c2">100</span><br> <span class="l">1</span><span class="c2">101</span><br> <span class="l">1</span><span class="c2">110</span><br> <span class="l">1</span><span class="c2">111</span><br> </p></td> <td><p id="b5"> <span class="o">0</span><span class="c1">0000</span><br> <span class="o">0</span><span class="c1">0001</span><br> <span class="o">0</span><span class="c1">0010</span><br> <span class="o">0</span><span class="c1">0011</span><br> <span class="o">0</span><span class="c1">0100</span><br> <span class="o">0</span><span class="c1">0101</span><br> <span class="o">0</span><span class="c1">0110</span><br> <span class="o">0</span><span class="c1">0111</span><br> <span class="o">0</span><span class="c1">1000</span><br> <span class="o">0</span><span class="c1">1001</span><br> <span class="o">0</span><span class="c1">1010</span><br> <span class="o">0</span><span class="c1">1011</span><br> <span class="o">0</span><span class="c1">1100</span><br> <span class="o">0</span><span class="c1">1101</span><br> <span class="o">0</span><span class="c1">1110</span><br> <span class="o">0</span><span class="c1">1111</span><br> <span class="l">1</span><span class="c2">0000</span><br> <span class="l">1</span><span class="c2">0001</span><br> <span class="l">1</span><span class="c2">0010</span><br> <span class="l">1</span><span class="c2">0011</span><br> <span class="l">1</span><span class="c2">0100</span><br> <span class="l">1</span><span class="c2">0101</span><br> <span class="l">1</span><span class="c2">0110</span><br> <span class="l">1</span><span class="c2">0111</span><br> <span class="l">1</span><span class="c2">1000</span><br> <span class="l">1</span><span class="c2">1001</span><br> <span class="l">1</span><span class="c2">1010</span><br> <span class="l">1</span><span class="c2">1011</span><br> <span class="l">1</span><span class="c2">1100</span><br> <span class="l">1</span><span class="c2">1101</span><br> <span class="l">1</span><span class="c2">1110</span><br> <span class="l">1</span><span class="c2">1111</span><br> </p></td> </tr> </table>
table.bits{ border:none; } table.bits td { border:none; vertical-align:top; } table.bits td p{ text-align:right; } .state0 .c1{ color:#000;} .state0 .c2{ color:#000;} .state0 .o { color:#000;} .state0 .l { color:#000;} .state1 .c1{ color:#000;} .state1 .c2{ color:#fff;} .state1 .o { color:#fff;} .state1 .l { color:#fff;} .state2 .c1{ color:#000;} .state2 .c2{ color:#fff;} .state2 .o { color:#f00;} .state2 .l { color:#fff;} .state3 .c1{ color:#000;} .state3 .c2{ color:#000;} .state3 .o { color:#f00;} .state3 .l { color:#fff;} .state4 .c1{ color:#000;} .state4 .c2{ color:#000;} .state4 .o { color:#f00;} .state4 .l { color:#06f;}