ライブラリ類のバージョン
- jQuery 1.7.2
- jQuery Mobile 1.1.0
- Google Maps API V3 (3.8)
覚書1: Google Maps APIの動的ロード
htmlのどこいらかで、jsapiを読み込んでおく。
<div id="scriptArea"> <script type="text/javascript" src="http://www.google.com/jsapi"></script> </div>
地図を読み込む局面で、jspai経由でgoogle Maps API読み込みを行う。
// Maps API読み込み状態を管理するdeferredオブジェクトを作っておく。
_maps_loaded: $.Deferred()
// 地図の読み込み終了直後に行う初期化処理を登録しておく。
this._maps_loaded.done(this.initialize_map);
// 読み込み開始、完了時にDeferredを完了状態にする。
google.load('maps', '3', {
other_params: 'sensor=false',
callback: function(){
that._maps_loaded.resolve();
}});
覚書2: 地図を画面いっぱいに広げる
jQuery Mobileだと地図用のdivのwidth,heightを100%にしても広がらない模様。
$('#map_canvas').css('width', $(document).width());
$('#map_canvas').css('height', $(document).height());
// ↓は実機では未検証。
// 画面回転についていくなら、orientationchangeメソッドについていけばよい(はず)。
$(window).on('orientationchange',function(e){
});
下はテスト書きした全文。適当なオブジェクトに作り始めたけど、クラス化するか、jQuery MobileのWidget化するか、かな。
var store_map_page = {
_maps_loaded: $.Deferred(),
_map_options: {},
geos: {},
map_obj: {},
map_info_window: {},
_lazy_loaded: function(){
this.geos = {
station: new google.maps.LatLng(34.810538,135.494923),
yamada: new google.maps.LatLng(34.812141,135.494709),
oasis: new google.maps.LatLng(34.811155,135.494473)
};
var map_options = {
zoom: 17,
center: this.geos['station'],
mapTypeId: google.maps.MapTypeId.ROADMAP
};
this.map_obj = new google.maps.Map(document.getElementById('store_map_canvas'), map_options);
this.map_info_window = new google.maps.InfoWindow(this.map_obj);
_map_options = map_options;
},
_initialize: function (){
var that = this;
this._maps_loaded.done(this.map_resize, this._lazy_loaded);
google.load('maps', '3', {
other_params: 'sensor=false',
callback: function(){
that._maps_loaded.resolve();
}});
},
map_resize: function(){
$('#store_map_canvas').css('width', $(document).width());
$('#store_map_canvas').css('height', $(document).height());
},
orientation_changed: function(e){
this.map_resize();
if(e.orientation =='portrait'){
} else {
}
}
};
$('body').on('pageshow', function(){
store_map_page._initialize.apply(store_map_page);
});
$(window).on('orientationchange',function(e){
store_map_page.orientation_changed.call(store_map_page, e);
});
$(window).resize(store_map_page.map_resize);