google maps api v3でリンクを押したらInfoWindowを表示させる
今更ながらgoogle mpas apiのお話です。
@motokixとaタグのリンクをクリックしたらinfoWindowを表示するにはどうやるかって話になったんで書いてみました。
jsonで緯度、経度、url、タイトルを持たせてそれをinfoWindowで表示するって感じです。
ちなみにmapのサイズはブラウザのwindowサイズにあわせて変更するようになってます。
javascript書くのは楽しいですね。
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>Insert title here</title>
<script type="text/javascript" src="http://maps.google.com/maps/api/js?sensor=false"></script>
<script type="text/javascript" src="http://ajax.googleapis.com/ajax/libs/jquery/1.7.1/jquery.min.js"></script>
<link rel="stylesheet" type="text/css" href="/css/reset.css">
<script type="text/javascript">
var mapInfos = [
{
text: "エクスクウェイド",
link: "http://www.exquad.co.jp/",
lat: 35.732404,
lng: 139.719921
},
{
text: "練馬駅",
link: "",
lat: 35.737800,
lng: 139.654035
},
{
text: "椎名町",
link: "",
lat: 35.726661,
lng: 139.694687
},
{
text: "北池袋",
link: "",
lat: 35.7404,
lng: 139.7165
}
];
var mapOptions = {
zoom: 15,
center: new google.maps.LatLng(35.7307,139.7133),
mapTypeId: google.maps.MapTypeId.ROADMAP
};
$(function(){
var markers = [];
var map;
var infoWindow;
var createMarker = function( mapInfo ) { // mapを生成する
var marker = new google.maps.Marker({
map: map,
position: new google.maps.LatLng(mapInfo.lat, mapInfo.lng),
title:mapInfo.text
});
// イベント登録
google.maps.event.addListener(marker,'click',function(){
showInfoWindow(mapInfo,marker);
});
markers.push(marker);
};
var showInfoWindow = function(mapInfo,marker) { // info windowの表示
var content = '<div style="overflow:auto;width:100%;height:100%;text-align:center;">' + mapInfo.text +'</div>';
if ( mapInfo.link ) {
content += "<div><a href='"+ mapInfo.link + "'>リンク</a></div>";
}
if ( infoWindow ) {
infoWindow.close();
}
infoWindow = new google.maps.InfoWindow({
content: content,
maxWidth: 1000
});
// map.setCenter(marker.getPosition()); // マップの中心位置にする
infoWindow.open(map,marker);
};
var map = new google.maps.Map($("#map")[0], mapOptions);
$.each(mapInfos, function(index,json){
createMarker(json); // マーカーの生成
$('#menu').append('<a href="#" class="open" id="_'+ index + '">' + json.text + '</a>、' );
});
$('.open').click(function(){ // クリックした際にinfoWindowを表示する
var index = this.id.replace('_','');
showInfoWindow(mapInfos[index],markers[index]);
});
// windowをリサイズする
var windowResize = function() {
$('#map').css({
width:$(window).width(),
height:$(window).height() - 100
});
}
windowResize();
$(window).resize(windowResize);
});
</script>
</head>
<body>
<div id="map" style="width:100%; height:1000px"></div>
<div id="menu"></div>
</body>
</html>
こんな感じで動いてます。