このページの本文へ

  • twitterでつぶやく
  • はてなブックマークに登録
  • del.icio.usに登録
  • livedoorクリップに登録
  • Buzzurlに登録
  • StumbleUponに登録
  • Google Bookmarksに登録
  • Facebookでシェア
  • Yahoo!ブックマークに登録
  • お気に入りに登録
  • 本文印刷

29分でできる! あのサイトの“技”を盗め ― 第25回

Googleマップ+jQueryで作るAjaxなデザイン

2009年05月26日 11時55分更新

文● 古籏一浩、ASCII.jp


外部データをAjaxで読み込む

 ここまでで事前準備が整ったので、今回のキモであるマウスオーバー時の処理を作りましょう。マウスオーバー時の処理は、jQueryでは以下のように記述します。shopmap は先ほどサムネイル画像に設定したクラス名です。


$(".shopmap").mouseover(function(){
 マウスオーバー時の処理
})


 次に、実際にマウスオーバー時の処理の中身を書いていきます。マウスオーバーしたサムネイル画像には longdesc属性が設定されており、URL, 緯度, 経度の順番にデータが書かれています。そこで、以下のように longdesc属性の内容を読み出し、それぞれのデータに切り分けます。shopdata には配列形式でURL, 緯度, 経度の順番にデータが格納されます。


var shopdata = ($(this).attr("longdesc")).split(",");


 最初のデータは、書店の紹介文を記述した外部HTMLファイルのURLです。このHTMLを以下のようにAjax (非同期通信) を使って読み込み、ID名「shopInfo」の位置に表示します。shopdata[0] には書店情報のページURLが入っているので、load() のパラメータに指定するだけで自動的に内容が読み込まれ、表示されます。


$("#shopInfo").load(shopdata[0]);


 続いて、Googleマップを書店の所在地を示す座標に移動させます。地図の位置は以下のようにして設定します。


var pos = new GLatLng(parseFloat(shopdata[1]),parseFloat(shopdata[2]));
map.panTo(pos, 15);


 単純に座標を移動させるだけなら setCenter() でもいいのですが、panTo() を使った方が見た目にはよいでしょう。 panTo() は、指定した座標が現在表示されている地図の範囲内に存在する場合に、スムーズにスクロールしながら表示を切り替える命令です。

 次に、書店の場所をマーカーで示しましょう。マーカーは以下のように書けば表示できます。


map.addOverlay(new GMarker(pos));


 ただこれだと、サムネイル画像にマウスを乗せるたびにマーカーがどんどん追加されてしまい、表示速度が低下する原因になります。そこで、すでにマーカーが表示されている場合は新たにマーカーを表示しないように対策します。

 対策方法はいくつかありますが、今回は、一度マーカーが表示されたら、 flag属性を imgタグに追加し、flag属性が存在する場合にはマーカーを追加しないようにします。わずか3行で実現できる手軽な方法です。


if($(this).attr("flag")) return;    // すでにマーカーがある場合は処理しない
map.addOverlay(new GMarker(pos));
$(this).attr("flag", true);

 以上で、マウスオーバー時の処理が完成しました。ここまでに説明したスクリプトは以下のとおりです。


    // サムネールオーバー&書店情報表示処理
    $(".shopmap").mouseover(function(){
        var shopdata = ($(this).attr("longdesc")).split(",");
        $("#shopInfo").load(shopdata[0]);
        var pos = new GLatLng(parseFloat(shopdata[1]),parseFloat(shopdata[2]));
        map.panTo(pos, 15);
        if($(this).attr("flag")) return;    // すでにマーカーがある場合は処理しない
        map.addOverlay(new GMarker(pos));
        $(this).attr("flag", true);
    });


この連載の記事

ASCII.jp会員サービス 週刊Web Professional登録

Webディレクター江口明日香が行く

みんなが買ってる最新アイテムはコレだ!

VOCALOID3 スターターIA ARIA ON THE PLANETES

VOCALOID3 スターターIA ARIA ON THE PLANETES

ヤマハ

17,745円〜

24人が購入

Google上位表示 64の法則 (WEB PROFESSIONAL)

Google上位表示 64の法則 (WEB PROFESSIONAL)

アスキー・メディアワークス

2,499円〜

72人が購入

標準HTML5タグリファレンス (WEB PROFESSIONAL)

標準HTML5タグリファレンス (WEB PROFESSIONAL)

アスキー・メディアワークス

2,205円〜

59人が購入

Speck MacBook Air 13型 See Thru - Clear SPK-MBA13-SEE-CLR

Speck MacBook Air 13型 See Thru - Clear SPK-MBA13-SEE-CLR

スペックコンピュータ

4,262円〜

23人が購入

jQuery Mobile スマートフォンサイト デザイン入門 (WEB PROFESSIONAL)

jQuery Mobile スマートフォンサイト デザイン入門 (WEB PROFESSIONAL)

アスキー・メディアワークス

2,499円〜

40人が購入

メモリーカード 32GB (PCH-Z321J)

メモリーカード 32GB (PCH-Z321J)

ソニー・コンピュータエンタテインメント

7,772円〜

9人が購入

iPhone 4S/4 防指紋性・高光沢機能性フィルム PRO GUARD AF for iPhone 4S/4 / PGAF-IPH4

iPhone 4S/4 防指紋性・高光沢機能性フィルム PRO GUARD AF for iPhone 4S/4 / PGAF-IPH4

マイクロソリューション Micro Solution Inc.

61人が購入

Amazon.co.jp