メニューなどのそばに表示させる事で、アンカーにマウスカーソルをあてがうだけでリンク先の説明などをテキストで表示するものです。
スクリプトを実行できる環境なら、メニューの下にフォームが表示され、リンクをポイントするとリンク先の説明が表示されます。
スクリプトを実行できない環境でも、フォームは表示されませんが、メニューは問題無く利用できます。
リンク解説表示スクリプト「MenuGuidance.js」は以下の通りです。
width=48;
height=2;
ex_menu=new Array();
ex_menu[0]=' 日本で最もアクセスされているポータルサイトです。';
ex_menu[1]=' 情報量や精度では最も評価の高い検索エンジンです。';
ex_menu[2]=' 日本最大の通販サイト『楽天市場』が運営する総合ポータルサイトです。';
document.write(
'<form action="#">'+
'<div>解説:<textarea name="explain1" wrap="soft" cols="'+width+'" rows="'+height+'"></textarea></div>'+
'</form>'
);
function put2form(str) {
i=document.forms.length;
while (--i>=0) {
if (document.forms[i].explain1) {
document.forms[i].explain1.value=ex_menu[str];
break;
}
}
}
今回は、HTML文書側にも細工が必要になります。
<ul>
<li><a onmouseover="put2form(0)" onfocus="put2form(0)" href="http://www.yahoo.co.jp/">ヤフージャパン</a></li>
<li><a onmouseover="put2form(1)" onfocus="put2form(1)" href="http://www.yahoo.co.jp/" href="http://www.google.co.jp/">グーグル日本</a></li>
<li><a onmouseover="put2form(2)" onfocus="put2form(2)" href="http://www.yahoo.co.jp/" href="http://www.infoseek.co.jp/">インフォシーク</a></li>
</ul>
<script type="text/javascript" charset="shift_jis" src="MenuGuidance.js"></script>
onmouseover属性は、アンカーにマウスカーソルがあてがわれた時点で起動するスクリプトを指定します。この場合、「put2form(i)」という函数を起動する事になります。
onfocus属性は、当該アンカーがフォーカスされた状態(TABキーでカーソルが当該アンカー上に来た場合など)になったときに起動するスクリプトを指定します。
tabindex="整数"」属性を与えておき、スクリプトが出力するフォームの<textarea>要素には与えないと言うやり方でスクリプトが出力するフォームへのフォーカスを一番最後にすることが出来ます。このスクリプトの流れは、以下のようになります。
スクリプト冒頭の以下の部分が必要な初期設定です。
width=48;
height=2;
ex_menu=new Array();
ex_menu[0]=' 日本で最もアクセスされているポータルサイトです。';
ex_menu[1]=' 情報量や精度では最も評価の高い検索エンジンです。';
ex_menu[2]=' 日本最大の通販サイト『楽天市場』が運営する総合ポータルサイトです。';
widthはメッセージを表示するフォームの横幅を半角文字数で指定します。heightはメッセージを表示するフォームの高さを字数で指定します。ex_menuはメッセージを入れる文字列を収める配列変数です。スカラー変数と違って、配列変数では宣言が必要になります。ex_menu[i]='…';で実際のメッセージをセットしております。尚、配列変数の番号は「0」から始まります。
ex_menu[i]='…';」の「[i]」はHTML文書側での「onmouseover="put2form(i)"」の「(i)」と一致している事に注意して下さい。一致していないと無関係なメッセージが表示される事になります。\」を追加して下さい。document.write(
'<form action="#">'+
'<div>解説:<textarea name="explain1" wrap="soft" cols="'+width+'" rows="'+height+'"></textarea></div>'+
'</form>'
);
フォームの<textarea>要素に、name="explain1"属性が与えられています。フォームの幅はcols属性で、高さはrows属性でそれぞれ与えます。
wrap="soft"属性が無いと、旧いブラウザでは表示テキストが折返されずに表示されてしまいます。function put2form(str) {
i=document.forms.length;
while (--i>=0) {
if (document.forms[i].explain1) {
document.forms[i].explain1.value=ex_menu[str];
break;
}
}
}
document.forms.length」で「document.forms[]」の要素の個数、すなわちFormオブジェクトの個数を得られます。if (document.forms[i].explain1) {」は撰んだFormオブジェクトの下位にexplain1オブジェクトがあれば実行されるというものです。スクローリングメッセージを表示している<textarea>要素には「name="explain1"」属性が与えられていました。
name="explain1"」属性が与えられている要素があるとそちらを選択して巧くいかない可能性があります。対策としてはname属性の値を文書中で一意的なものにする、すなわち同じname属性値を他の要素では使わないというのが考えられます。document.forms[i].explain1」が見つからない可能性もありますが、その場合はこの函数は何もしないだけです。document.forms[i].explain1.value=ex_menu[str];
具体的には「document.forms[i].explain1.value」に呼出時に指定された番号の「ex_menu[str]」を代入するだけです。最後に必要な動作が終わったのでもうフォーム探しも不要となり、break文で脱出します。
Copyright ©平成15年-平成24年 さいたま・しらぎくさいと 版権所有
marguerite.site@gmail.com