1

Google Maps API は初めてです。イベント ハンドラーを呼び出し、XML の戻りデータを使用してマーカーとラベルを設定する HTML ページがあります。問題は、ラベルの値を更新できないように見えることです。ラベルが自分自身を上書きするだけで、遅かれ早かれ IE がクラッシュし、「このスクリプトの実行を停止しますか? このページのスクリプトが原因で Web ブラウザの実行が遅くなります......」というメッセージが表示されます。

<!--<script type="text/javascript" src="/js/labeledmarker.js"></script>-->

<script type="text/javascript">

 var map;
      function initialize() {
        var mapDiv = document.getElementById('map-canvas');
        map = new google.maps.Map(mapDiv, {
          center: new google.maps.LatLng(27.896415, -81.843137),
          zoom: 9,
          mapTypeId: google.maps.MapTypeId.ROADMAP
        });

        google.maps.event.addListenerOnce(map, 'tilesloaded', addMarkers);

      }

      function addMarkers() 
 {

     downloadUrl("get_waittime_feed.ashx", function (data) {

         var markers = data.documentElement.getElementsByTagName("marker");
         for (var i = 0; i < markers.length; i++) {
             var latlng = new google.maps.LatLng(parseFloat(markers[i].getAttribute("latitude")),
                                    parseFloat(markers[i].getAttribute("longitude")));
             var markericons = markers[i].getAttribute("markericons");
            var waitER = markers[i].getAttribute("waitER");

             var customIcons = { 0: { icon: new google.maps.MarkerImage('../img/greenbb.png', new google.maps.Size(30, 30)) },
                 1: { icon: new google.maps.MarkerImage('../img/redbb.png', new google.maps.Size(30, 30)) },
                 2: { icon: new google.maps.MarkerImage('../img/hospital.png', new google.maps.Size(35, 35))}
             };
             var icon = {}; if (markericons == '0') {
                 icon = customIcons[0];
             }
             else if (markericons == '1') {
                 icon = customIcons[1];
             }
             else if (markericons == '2') {
                 icon = customIcons[2];
             };

             var marker = new MarkerWithLabel({
                position: latlng,
                map: map,
                icon: icon.icon,
                labelContent: waitER,
                labelAnchor: new google.maps.Point(3, 30),
                labelClass: "labels", // the CSS class for the label
                labelInBackground: false
                });

         }
     });

};

setInterval(addMarkers, 5000);
4

3 に答える 3

4

これは私のために働いた

marker.labelContent = 'New Label';

marker.label.setContent();

于 2014-06-02T15:17:41.067 に答える
3

IE がその警告を表示する理由は、実際にはマーカーを更新していないためですaddMarkers()。. そのため、JavaScript に対する IE の時間制限を超えるまで、マップの更新に時間がかかります。

で毎回新しいものを作成する代わりにvar marker = new MarkerWithLabel()、関数が最初に呼び出されたときに作成し、その後の呼び出しごとに更新します。例えば:

totalmarkers = markers.length;
for (i = 0; i < totalmarkers; i++) {
    if (markers[i] == null) { // Create your marker here
        markers[i] = new MarkerWithLabel({
            position: latlng,
            map: map,
            icon: icon.icon,
            labelContent: waitER,
            labelAnchor: new google.maps.Point(3, 30),
            labelClass: "labels", // the CSS class for the label
            labelInBackground: false
            });
    } else { // Update your marker here
        markers[i].labelContent = 'label content';
        markers[i].labelClass = 'label class';
        markers[i].label.setStyles(); // Force label to redraw (makes update visible)
        markers[i].setPosition(googlemapslatlng); // Move the marker to a new position
        markers[i].icon = iconurl; // If you want to change the icon
        markers[i].setShape(); // Force the marker icon to redraw
    }

それが役立つことを願っています。マーカー ラベルの更新については、このスレッドも参照してください。

于 2013-04-22T01:34:17.723 に答える