実現したいこと
東京タワーのアイコンをクリックすると情報ウィンドウが開くようにしたい。
情報ウィンドウが開いた状態での表示はできています。
addEventListenerを使って、クリックしたときに開くようにしたいです。
発生している問題・分からないこと
infowindow.open(map, marker1);は実現しています。
marker1.addEventListener("click", function () {
infowindow.open(map, marker1);
});
だとアイコンをクリックしても表示できない。
コードの最後の// window.initMap = initMap;がよくわからない
該当のソースコード
main.js
1function initMap() { 2 var akiba = { lat: 35.6982, lng: 139.774256 }; 3 var tokyoTower = { lat: 35.658581, lng: 139.745433 }; 4 5 var map = new google.maps.Map(document.getElementById("map"), { 6 zoom: 12, 7 center: akiba, 8 }); 9 10 marker1 = new google.maps.Marker({ 11 position: tokyoTower, 12 map: map, 13 title: "東京タワー", 14 icon: { 15 url: "https://assets.codeprep.jp/books/googlemap/tokyo_tower.png", 16 scaledSize: new google.maps.Size(50, 100), 17 }, 18 }); 19 20 var infowindow = new google.maps.InfoWindow({ 21 content: `<div> 22 <h3>東京タワー</h3> 23 <p>とても大きい</p> 24 </div>`, 25 position: tokyoTower, 26 }); 27 28 // infowindow.open(map, marker1); 29 marker1.addEventListener("click", function () { 30 infowindow.open(map, marker1); 31 }); 32} 33// window.initMap = initMap;
index.html
1<!DOCTYPE html> 2<html> 3 <head> 4 <meta charset="utf-8" /> 5 <title>情報ウィンドウを表示する(2)</title> 6 <link 7 rel="stylesheet" 8 href="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.7/css/bootstrap.min.css" 9 /> 10 <link rel="stylesheet" href="./css/main.css" /> 11 <script 12 async 13 defer 14 src="https://maps.googleapis.com/maps/api/js?key=AIzaSyB18K9EOExTMmUaiOgJiRFaLxxxxx&callback=initMap" 15 type="text/javascript" 16 ></script> 17 <script src="./js/main3.js"></script> 18 </head> 19 <body> 20 <div class="form row"> 21 <div class="col-md-1 col-sm-2"> 22 <select id="cities class=form-control"> 23 <option value="東京">東京</option> 24 <option value="大阪">大阪</option> 25 <option value="名古屋">名古屋</option> 26 <option value="札幌">札幌</option> 27 <option value="福岡">福岡</option> 28 <option value="高松">高松</option> 29 <option value="那覇">那覇</option> 30 </select> 31 </div> 32 </div> 33 <div class="map"> 34 <div id="map">ここにMapを表示</div> 35 </div> 36 <div class="events"> 37 <h3>メッセージ</h3> 38 <div id="messages"></div> 39 </div> 40</body> 41</html>
試したこと・調べたこと
- teratailやGoogle等で検索した
- ソースコードを自分なりに変更した
- 知人に聞いた
- その他
上記の詳細・結果
デベロッパーツールのエラー内容です。
js?key=AIzaSyB18K9EO…allback=initMap:276 Google Maps JavaScript API has been loaded directly without loading=async. This can result in suboptimal performance. For best-practice loading patterns please see https://goo.gle/js-api-loading
js?key=AIzaSyB18K9EO…allback=initMap:198 As of February 21st, 2024, google.maps.Marker is deprecated. Please use google.maps.marker.AdvancedMarkerElement instead. At this time, google.maps.Marker is not scheduled to be discontinued, but google.maps.marker.AdvancedMarkerElement is recommended over google.maps.Marker. While google.maps.Marker will continue to receive bug fixes for any major regressions, existing bugs in google.maps.Marker will not be addressed. At least 12 months notice will be given before support is discontinued. Please see https://developers.google.com/maps/deprecations for additional details and https://developers.google.com/maps/documentation/javascript/advanced-markers/migration for the migration guide.
main3.js:30 Uncaught (in promise) TypeError: marker1.addEventListener is not a function
at initMap (main3.js:30:11)
at js?key=AIzaSyB18K9EOExTMmUaiOgJiRFaLyrRjjjOzlY&callback=initMap:281:275
at js?key=AIzaSyB18K9EOExTMmUaiOgJiRFaLyrRjjjOzlY&callback=initMap:280:288
補足
[CODEPREPのフロントエンドの定番ライブラリを学ぶ>GoogleMapで遊ぼう>
3.マーカーをカスタマイズする>3-3」
勉強しています。
Windows10,vscodeで編集、実行しています。
表示はGoogle Chromeです。
ここでは最初から動かなかったので、自分なりにかなり変更しているのでおかしなところがあると思います。
そこら辺の指摘をしていただければありがたいです。
よろしくお願いいたします。

回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。