質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
87.20%
WordPress

WordPressは、PHPで開発されているオープンソースのブログソフトウェアです。データベース管理システムにはMySQLを用いています。フリーのブログソフトウェアの中では最も人気が高く、PHPとHTMLを使って簡単にテンプレートをカスタマイズすることができます。

JavaScript

JavaScriptは、プログラミング言語のひとつです。ネットスケープコミュニケーションズで開発されました。 開発当初はLiveScriptと呼ばれていましたが、業務提携していたサン・マイクロシステムズが開発したJavaが脚光を浴びていたことから、JavaScriptと改名されました。 動きのあるWebページを作ることを目的に開発されたもので、主要なWebブラウザのほとんどに搭載されています。

Google マップ

Google Mapは、Google社がオンラインで提供している地図・ローカル検索サービスです。GIS(Geographic Information System:地理情報システム)の中の「WebGIS」に該当します。地図・航空写真・地形の表示方式があり、それぞれユーザーが縮尺を調整して表示させることができます。地域の情報サービスを検索する機能やルート検索の機能も搭載されています。

解決済

Google Mapの情報ウインドウを常にひとつだけ表示したい

17dez
17dez

総合スコア0

WordPress

WordPressは、PHPで開発されているオープンソースのブログソフトウェアです。データベース管理システムにはMySQLを用いています。フリーのブログソフトウェアの中では最も人気が高く、PHPとHTMLを使って簡単にテンプレートをカスタマイズすることができます。

JavaScript

JavaScriptは、プログラミング言語のひとつです。ネットスケープコミュニケーションズで開発されました。 開発当初はLiveScriptと呼ばれていましたが、業務提携していたサン・マイクロシステムズが開発したJavaが脚光を浴びていたことから、JavaScriptと改名されました。 動きのあるWebページを作ることを目的に開発されたもので、主要なWebブラウザのほとんどに搭載されています。

Google マップ

Google Mapは、Google社がオンラインで提供している地図・ローカル検索サービスです。GIS(Geographic Information System:地理情報システム)の中の「WebGIS」に該当します。地図・航空写真・地形の表示方式があり、それぞれユーザーが縮尺を調整して表示させることができます。地域の情報サービスを検索する機能やルート検索の機能も搭載されています。

1回答

0評価

0クリップ

3801閲覧

投稿2016/04/07 04:36

###前提
Wordpress&ACF(Advanced Custom Fields)でGoogle Mapをサイト上に表示しています。
参考にしたのは、こちらのサンプルコードです。
[https://www\.advancedcustomfields\.com/resources/google-map/\]\(https://www\.advancedcustomfields\.com/resources/google-map/\)

HTML

<style type="text/css"> \.acf-map { width: 100%; height: 400px; border: #ccc solid 1px; margin: 20px 0; } /\* fixes potential theme css conflict \*/ \.acf-map img { max-width: inherit !important; } </style> <script src="https://maps\.googleapis\.com/maps/api/js\?v=3\.exp&sensor=false"></script>

PHP

<\?php if\( have_rows\('locations'\) \): \?> <div class="acf-map"> <\?php while \( have_rows\('locations'\) \) : the_row\(\); \$location = get_sub_field\('location'\); \?> <div class="marker" data-lat="<\?php echo \$location\['lat'\]; \?>" data-lng="<\?php echo \$location\['lng'\]; \?>"> <h4><\?php the_sub_field\('title'\); \?></h4> <p class="address"><\?php echo \$location\['address'\]; \?></p> <p><\?php the_sub_field\('description'\); \?></p> </div> <\?php endwhile; \?> </div> <\?php endif; \?>

Javascript

\(function\(\$\) { /\* \* new_map \* \* This function will render a Google Map onto the selected jQuery element \* \* @type function \* @date 8/11/2013 \* @since 4\.3\.0 \* \* @param \$el \(jQuery element\) \* @return n/a \*/ function new_map\( \$el \) { // var var \$markers = \$el\.find\('\.marker'\); // vars var args = { zoom : 16, center : new google\.maps\.LatLng\(0, 0\), mapTypeId : google\.maps\.MapTypeId\.ROADMAP }; // create map var map = new google\.maps\.Map\( \$el\[0\], args\); // add a markers reference map\.markers = \[\]; // add markers \$markers\.each\(function\(\){ add_marker\( \$\(this\), map \); }\); // center map center_map\( map \); // return return map; } /\* \* add_marker \* \* This function will add a marker to the selected Google Map \* \* @type function \* @date 8/11/2013 \* @since 4\.3\.0 \* \* @param \$marker \(jQuery element\) \* @param map \(Google Map object\) \* @return n/a \*/ function add_marker\( \$marker, map \) { // var var latlng = new google\.maps\.LatLng\( \$marker\.attr\('data-lat'\), \$marker\.attr\('data-lng'\) \); // create marker var marker = new google\.maps\.Marker\({ position : latlng, map : map }\); // add to array map\.markers\.push\( marker \); // if marker contains HTML, add it to an infoWindow if\( \$marker\.html\(\) \) { // create info window var infowindow = new google\.maps\.InfoWindow\({ content : \$marker\.html\(\) }\); // show info window when marker is clicked google\.maps\.event\.addListener\(marker, 'click', function\(\) { infowindow\.open\( map, marker \); }\); } } /\* \* center_map \* \* This function will center the map, showing all markers attached to this map \* \* @type function \* @date 8/11/2013 \* @since 4\.3\.0 \* \* @param map \(Google Map object\) \* @return n/a \*/ function center_map\( map \) { // vars var bounds = new google\.maps\.LatLngBounds\(\); // loop through all markers and create bounds \$\.each\( map\.markers, function\( i, marker \){ var latlng = new google\.maps\.LatLng\( marker\.position\.lat\(\), marker\.position\.lng\(\) \); bounds\.extend\( latlng \); }\); // only 1 marker\? if\( map\.markers\.length == 1 \) { // set center of map map\.setCenter\( bounds\.getCenter\(\) \); map\.setZoom\( 16 \); } else { // fit to bounds map\.fitBounds\( bounds \); } } /\* \* document ready \* \* This function will render each map when the document is ready \(page has loaded\) \* \* @type function \* @date 8/11/2013 \* @since 5\.0\.0 \* \* @param n/a \* @return n/a \*/ // global var var map = null; \$\(document\)\.ready\(function\(\){ \$\('\.acf-map'\)\.each\(function\(\){ // create map map = new_map\( \$\(this\) \); }\); }\); }\)\(jQuery\); </script>

###実現したいこと
こちらのコードを用いて、複数マーカーとそれぞれの情報ウインドウを表示させることまではできましたが、残念ながらこれだと情報ウインドウが複数同時に開いてしまいます。
マーカーが多く見づらいので、できれば地図上に表示される情報ウインドウは一つにしたいと思ってます。

###試したこと
他のサイトを参考にコードを追加してみましたが、やはりinfoWindowは閉じてくれません。

Javascript

function add_marker\( \$marker, map \) { // var var latlng = new google\.maps\.LatLng\( \$marker\.attr\('data-lat'\), \$marker\.attr\('data-lng'\) \); // create marker var marker = new google\.maps\.Marker\({ position : latlng, map : map }\); // add to array map\.markers\.push\( marker \); // if marker contains HTML, add it to an infoWindow if\( \$marker\.html\(\) \) { // create info window var infowindow = new google\.maps\.InfoWindow\({ content : \$marker\.html\(\) }\); // show info window when marker is clicked google\.maps\.event\.addListener\(marker, 'click', function\(\) { if \( CurrentWindow \) { CurrentWindow\.close\(\); } infowindow\.open\( map, marker \); CurrentWindow = infowindow; }\); } }

ひとつの情報ウインドウのみ表示するには、どうカスタマイズしたらいいのでしょうか?
どなたかご教授いただけたら幸いです。よろしくお願いします。

良い質問の評価を上げる

以下のような質問は評価を上げましょう

  • 質問内容が明確
  • 自分も答えを知りたい
  • 質問者以外のユーザにも役立つ

評価が高い質問は、TOPページの「注目」タブのフィードに表示されやすくなります。

気になる質問をクリップする

クリップした質問は、後からいつでもマイページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

teratailでは下記のような質問を「具体的に困っていることがない質問」、「サイトポリシーに違反する質問」と定義し、推奨していません。

  • プログラミングに関係のない質問
  • やってほしいことだけを記載した丸投げの質問
  • 問題・課題が含まれていない質問
  • 意図的に内容が抹消された質問
  • 過去に投稿した質問と同じ内容の質問
  • 広告と受け取られるような投稿

評価を下げると、トップページの「アクティブ」「注目」タブのフィードに表示されにくくなります。

まだ回答がついていません

会員登録して回答してみよう

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
87.20%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問

同じタグがついた質問を見る

WordPress

WordPressは、PHPで開発されているオープンソースのブログソフトウェアです。データベース管理システムにはMySQLを用いています。フリーのブログソフトウェアの中では最も人気が高く、PHPとHTMLを使って簡単にテンプレートをカスタマイズすることができます。

JavaScript

JavaScriptは、プログラミング言語のひとつです。ネットスケープコミュニケーションズで開発されました。 開発当初はLiveScriptと呼ばれていましたが、業務提携していたサン・マイクロシステムズが開発したJavaが脚光を浴びていたことから、JavaScriptと改名されました。 動きのあるWebページを作ることを目的に開発されたもので、主要なWebブラウザのほとんどに搭載されています。

Google マップ

Google Mapは、Google社がオンラインで提供している地図・ローカル検索サービスです。GIS(Geographic Information System:地理情報システム)の中の「WebGIS」に該当します。地図・航空写真・地形の表示方式があり、それぞれユーザーが縮尺を調整して表示させることができます。地域の情報サービスを検索する機能やルート検索の機能も搭載されています。