GoogleMap内に独自のドロップダウンメニューを設置する方法を記載します。
やりたい事
左上の「メニュー」ボタンの上にマウスを持っていくと。
以下の様にドロップダウンメニューを表示させます。
HTML、JavaScriptの設定
htmlにはmapというid名を設定します。
<div id="map" class="map">
JavaScriptは以下の様に設定します。
<script src="https://maps.googleapis.com/maps/api/js?
key={APIキー}&callback=initMap">
</script>
<script>
var map;
function initMap() {
map = new google.maps.Map(document.getElementById('map'), {
center: { lat: 35.681236, lng: 139.767125 },
zoom: 15,
mapTypeControl: false,
});
<!-- ドロップダウンメニュー用のDIV要素を作成 -->
var menu = document.createElement('DIV');
menu.className = 'menu'
<!-- 親のul要素を作成 -->
var dropDownMenuUl = document.createElement('ul');
dropDownMenuUl.className = 'dropmenu'
dropDownMenuUl.id = 'dropmenu';
<!-- 親のli要素を作成 -->
var dropDownMenuLi = document.createElement('li');
dropDownMenuLi.innerHTML = 'メニュー';
dropDownMenuLi.className = 'dropmenu_li'
<!-- 子のul要素を作成 -->
var dropDownListUl = document.createElement('ul');
dropDownListUl.className = 'droplist_ul'
<!-- 登録画面に遷移するli要素を作成 -->
var dropDownListLi = document.createElement('li');
dropDownListLi.className = 'droplist_li'
var linkUrl = '/memorymap/public/torokuGamen';
dropDownListLi.innerHTML =
'<a href="' + linkUrl + '">' + '登録をする' + '</a>';
<!-- 一覧画面に遷移するli要素を作成 -->
var dropDownListLi2 = document.createElement('li');
dropDownListLi2.className = 'droplist_li'
var linkUrl = '/memorymap/public/ichiranGamen';
dropDownListLi2.innerHTML =
'<a href="' + linkUrl + '">' + '一覧を見る' + '</a>';
<!-- 子要素のul要素にli要素を追加する -->
dropDownListUl.appendChild(dropDownListLi);
<!-- 子要素のul要素にli要素を追加する -->
dropDownListUl.appendChild(dropDownListLi2);
<!-- 親要素のli要素に上記要素を追加する -->
dropDownMenuLi.appendChild(dropDownListUl);
<!-- 親要素のul要素に上記要素を追加する -->
dropDownMenuUl.appendChild(dropDownMenuLi);
<!-- 最終的にdivタグに上記で作成したドロップダウンの要素を追加 -->
menu.appendChild(dropDownMenuUl);
<!-- GoogleMapに作成した要素を設定する -->
map.controls[google.maps.ControlPosition.TOP_LEFT].push(menu);
};
上記のdocument.createElementとappendChildの関数で以下のHTMLタグが組み立てられます。
<div class="menu" style="z-index: 0; position: absolute; left: 0px; top: 0px;">
<ul class="dropmenu" id="dropmenu">
<li class="dropmenu_li">
メニュー
<ul class="droplist_ul">
<li class="droplist_li">
<a href="/memorymap/public/torokuGamen">
登録をする
</a>
</li>
<li class="droplist_li">
<a href="/memorymap/public/ichiranGamen">
一覧を見る
</a>
</li>
</ul>
</li>
</ul>
</div>
google.maps.ControlPosition.TOP_LEFTでマップの左上にmenuという変数で組み立てたタグを挿入しています。
map.controls[google.maps.ControlPosition.TOP_LEFT].push(menu);
CSSの設定
CSSは以下の通りです。
.menu{
width: 100%;
}
.dropmenu{
*zoom: 1;
list-style-type: none;
width: 100%;
margin: 5px auto 30px;
padding: 0;
}
.dropmenu_li{
background-color: red;
color:white;
position: relative;
width: 10%;
float: left;
margin: 30px 10px 10px 30px;
padding: 20px 0px 20px 0px;
border-radius: 40px;
text-align: center;
font-size: large;
font-weight: bold;
box-shadow:0 3px 6px rgba(0, 0, 0), 0 1px 2px rgba(0, 0, 0);
}
.dropmenu_li a{
display: block;
margin: 0;
padding: 15px 0 11px;
background: white;
font-size: 14px;
line-height: 1;
text-decoration: none;
}
.droplist_ul{
list-style: none;
position: absolute;
z-index: 9999;
top: 100%;
left: 0;
margin-top: 30px;
padding: 0;
width: 300%;
border-radius: 20px;
}
.droplist_li{
width: 100%;
}
.droplist_li a{
padding: 40px 40px;
background: white;
text-align: left;
font-size: large;
font-weight: bold;
color: black;
}
.dropmenu_li:hover > a{
background:lightgray;
}
.dropmenu_li a:hover{
background: lightgray;
}
#dropmenu li ul{
visibility: hidden;
opacity: 0;
transition: 0s;
}
#dropmenu li:hover ul{
visibility: visible;
opacity: 1;
}
#dropmenu li ul li a{
visibility: hidden;
opacity: 0;
transition: .5s;
}
#dropmenu li:hover ul li a{
visibility: visible;
opacity: 1;
}
これで GoogleMap内に独自のドロップダウンメニューを設置することが可能です。お試しください。