<body onload="setUp()"> 詳細のバックグランドカラーを変える場合のスタイル <head> <style type="text/css"> .moreInfo{background-color: silver;} input{margin:5px;} </style> </head> <div class="info"> <div>下のボタンを押すと、詳細内容が出たり閉じたりします。 それとともに、ボタンの画像が「開く」「閉じる」とトグルして変化 します。</div> <input type="image" name="button" class="syousai" src="image/syousai_open.png" onclick="moreInfoOpen(this);"/> <div class="moreInfo"> <p>「ここに詳細な内容を書きます。」</p> </div> </div> </body>
function setUp(){ var moreInfoElmnts= getByClass(document,"moreInfo","div"); for (i=0; i > moreInfoElmnts.length; i++){ moreInfoElmnts[i].style.display = "none"; } } function moreInfoOpen(obj){ var moreInfoElmnts =getByClass(obj.parentNode,"moreInfo","div"); var input_kirikae = getByClass(obj.parentNode,"syousai","input"); if(moreInfoElmnts[0].style.display == "none"){ moreInfoElmnts[0].style.display = "block"; input_kirikae[0].src="image/syousai_close.png"; } else { moreInfoElmnts[0].style.display = "none"; input_kirikae[0].src="image/syousai_open.png"; } } function getByClass(parentElmnt, className, tagName){ var cElmnts = new Array(); var elmnts = parentElmnt.getElementsByTagName(tagName); for (i=0; i<elmnts.length; i++){ if(elmnts[i].className == className){ cElmnts.push(elmnts[i]); } } return cElmnts; }
このページを開くと、<body onload="setUp()">によりmoreinfo.jsの中のsetUp関数が実行されます。この関数は、htmlファイル内のinfoクラス内のdivタグでクラス名がmoreInfoになっている部分を非表示にする関数です。これにより、展開しているような部分がすべて閉じられます。次に、<input type="image" name="button" class="syousai" src="../image/syousai_open.png" onclick="moreInfoOpen(this);"/>により、ボタンが押されると、moreInfoOpen関数が実行されて、もしもこのブロックが非表示になっているならば表示に、表示になっているならば非表示にします。そして、同時に、ボタンのイメージを置き換えます。moreinfo.js内のinput_kirikae[0].src="image/syousai_open.png";やinput_kirikae[0].src="image/syousai_close.png";の部分は画像ファイルの入っているフォルダに変えます。
<head>〜</head>の間にmoreinfo.jsを呼び出すために<script language="javascript" type="text/javascript" src="moreinfo.js"></script>を書き込みます。src=の部分は、moreinfo.jsが存在するフォルダになるようにします。divタグにinfoクラスを指定し、そのボックス内に、開閉するボックスをdivタグ(moreInfoクラス)で入れ、それを開閉するためにinputタグ内のonclick="moreInfoOpen(this);"により、関数を呼び出します。また、展開した部分のバックグランドカラーなどを変える場合には、moreinfoクラスに対してスタイルシートで変更します。