- - PR -
【JavaScript】レイヤーをmapに重ねるとareaが認識されない
1
投稿者 | 投稿内容 | ||||||||
---|---|---|---|---|---|---|---|---|---|
|
投稿日時: 2008-08-04 12:10
いつもお世話になっております。
会議室違いかもしれませんが、相談させてください。 前回、「リッチクライアント&帳票」会議室にて相談させていただいたんですが、リアクションが一切無かったので「この会議室にはふさわしくない話題のかな」と思い、今回こちらにスレッドを立てさせていただきました。 よろしくお願いします。 現在、以下のような挙動をするWebページを作成しています。 1)画像の一部にカーソルを当てると、指定箇所に違う画像が表示される(ロールオーバー) 2)画像の一部をクリックすると、別のクリッカブルマップが表示される イメージとしては、以下のサイトの「地図から探す」です。 地図情報検索:マピオン(http://www.mapion.co.jp/) ここで、1)に関してご教授いただきたく思います。 私が現在実現させているのは、たとえば 日本地図(A.gif)の東京部分にカーソルを当てる →東京部分だけ描かれている透過GIF(A_tokyo.gif)を日本地図(A.gif)に重ねて表示する (レイヤーを使用) といった方法です。 ところが、map上にレイヤーを表示すると、areaタグのcoordsが認識されないようなのです。結果、A_tokyo.gifが表示された直後に消える、というような状態になってしまいます。 WEBでいろいろと調べてはみたのですが、解決策が見つかりません。 アドバイスをお願いします。 以下、ソースの一部です。 <html> <head> <title>クリッカブルマップ</title> <meta http-equiv="Content-Type" content="text/html; charset=shift-jis"/> <script language="JavaScript"> <!-- //フォーカスon function f() { document.getElementById('map_over').innerHTML='<img id="map_over_img" src=\"A_tokyo.gif\" width=505 height=295 border=0 style=\"position:absolute;z-index:1;top:0px;left:0px;\">'; } //フォーカスoff function unf(kind) { document.getElementById('map_over').innerHTML=''; } --> </script> </head> <body> <center> </div> <div id="link"><br></div> <img src="image/A.gif" width=608 height=430 NAME="japan_map" usemap="#japan_all" border=0 > <div id="map_over"></div> <map name="japan_all"> <area shape="poly" coords="座標" OnMouseOver="f()" OnMouseOut="unf()" OnClick="JavaScript:void(0);" alt="東京都"> <area /> </map> </div> </center> </body> </html> | ||||||||
|
投稿日時: 2008-08-04 12:23
areaが認識されないというか、認識はされているでしょう。
レイヤを重ねた際に、マウスのカーソルの位置のオブジェクトが、 元画像ではなく、レイヤ表示の画像であるため、 元画像のmouseoutイベントが発生しているのでしょう。 レイヤの画像の方にmouseoutイベントを付けてみては? | ||||||||
|
投稿日時: 2008-08-04 13:33
>かつのりさん お早い返答、ありがとうございます。 さっそく試してみます。 取り急ぎお礼まで。 | ||||||||
|
投稿日時: 2008-08-04 13:46
mouseoutイベントを付加しましたが、レイヤーの画像が透過GIFだってことを忘れていました。 レイヤーのA_tokyo.GIFは、日本地図A.GIFの東京部分のみに色がついており、他は透過となっています。(日本地図A.GIFと画像サイズ、東京の座標位置は一緒) 東京部分からmouseoutした際にイベントを発生させたいのですが、画像そのものからmouseoutしないとイベントが発生しませんでした。 以下、修正を加えた箇所です。 document.getElementById('map_over').innerHTML='<img id="map_over_img" src=\"img/img_map/allarea/all_afr_o.gif\" width=505 height=295 border=0 OnMouseOut="on_mouse_out()" style=\"position:absolute;z-index:1;top:0px;left:0px;\">'; | ||||||||
|
投稿日時: 2008-08-04 14:23
自己レスです。
逆転?の発想で、こんな方法を思いつきました。 無理矢理感が漂っている気もしますが・・・ ・日本地図(A.GIF)を背景にする。 ・map用画像として、全透過GIFを利用する。 ・背景とmap用画像との間に、ロールオーバー用画像を配置する。 階層は、以下のようになります。 【最前面】全透過GIF 【 B1層】ロールオーバー画像(A_tokyo.GIF) 【最背面】日本地図(A.GIF) <html> <head> <title>クリッカブルマップ</title> <meta http-equiv="Content-Type" content="text/html; charset=shift-jis"/> <script language="JavaScript"> <!-- //フォーカスon function f() { document.getElementById('map_over').innerHTML='<img id="map_over_img" src=\\\\"A_tokyo.gif\\\\" width=505 height=295 border=0 style=\\\\"position:absolute;z-index:-1;top:0px;left:0px;\\\\">'; } //フォーカスoff function unf(kind) { document.getElementById('map_over').innerHTML=''; } --> </script> </head> <body> <center> </div> <table background="image/A.gif"> <tr><td> <div id="link"><br></div> <!--map用画像には全透過GIFを使用--> <img src="image/touka.gif" width=608 height=430 NAME="japan_map" usemap="#japan_all" border=0 > <div id="map_over"></div> <map name="japan_all"> <area shape="poly" coords="座標" OnMouseOver="f()" OnMouseOut="unf()" OnClick="JavaScript:void(0);" alt="東京都"> <area /> </map> </td></tr> </table> </div> </center> </body> </html> |
1