2011-11-01 102 views
1

我採取了一些代碼形式從另一篇文章開始,但試圖讓它做我所需要的。我需要設置函數來顯示/隱藏標記,當它們被選中時,還可以將相應的圖標分配給標記類別,即Walk,Fish。切換谷歌地圖標記

要開始我需要讓show hide功能工作,目前沒有。

您可以在這裏找到一個演示... http://jsfiddle.net/huMtu/

回答

5

你的是,locations變量是一個信息數組的問題 - 它不是真正的谷歌地圖上的標記 - 這意味着你不能調用方法setVisible()就可以了......

你需要做的是將每個標記存儲在一個單獨的數組中,然後調用setVisible方法對這個新數組的元素....我更新了JSFiddle - >http://jsfiddle.net/huMtu/1/

這裏是JS部分:

var markers = new Array(); // Used to store the google markers 
    var locations = [ 
     ['Bondi Beach', 'Some text goes here<br />text', 'Walk', -33.890542, 151.274856, 4], 
     ['Coogee Beach', 'Some text goes here<br />text', 'Fish', -33.923036, 151.259052, 5], 
     ['Cronulla Beach', 'Some text goes here<br />text', 'Fish', -34.028249, 151.157507, 3], 
     ['Manly Beach', 'Some text goes here<br />text', 'Walk', -33.80010128657071, 151.28747820854187, 2], 
     ['Maroubra Beach', 'Some text goes here<br />text', 'Walk', -33.950198, 151.259302, 1] 
    ]; 

    var map = new google.maps.Map(document.getElementById('map'), { 
     zoom: 10, 
     center: new google.maps.LatLng(-33.92, 151.25), 
     mapTypeId: google.maps.MapTypeId.ROADMAP 
    }); 

    var infowindow = new google.maps.InfoWindow(); 

    var marker, i; 

    for (i = 0; i < locations.length; i++) { 
     marker = new google.maps.Marker({ 
     position: new google.maps.LatLng(locations[i][3], locations[i][4]), 
     map: map 
     }); 

     markers.push(marker); // Add the current marker to the array for later processing 

     google.maps.event.addListener(marker, 'click', (function(marker, i) { 
     return function() { 
      infowindow.setContent(locations[i][0]+"<br />"+locations[i][2]+"<br />"+locations[i][1]); 
      infowindow.open(map, marker); 
     } 
     })(marker, i)); 
    } 

    // == shows all markers of a particular category, and ensures the checkbox is checked == 
     function show(category) { 
     for (var i=0; i<locations.length; i++) { 
      if (locations[i][2] == category) { 
      markers[i].setVisible(true); // call the setVisible method of the marker 
      } 
     } 
     } 

     // == hides all markers of a particular category, and ensures the checkbox is cleared == 
     function hide(category) { 
     for (var i=0; i<locations.length; i++) { 
      if (locations[i][2] == category) { 
      markers[i].setVisible(false); // call the setVisible method of the marker 
      } 
     } 
     } 

     // == show or hide the categories initially == 
     show("Walk"); 
     hide("Fish"); 

working fiddle(與公開可用的圖標)

+0

感謝。我現在明白了。我想根據類別分配不同的標記圖像,因此不確定是否將其標記爲已解決並開始新帖子。你是一個很好的幫助! – Crashdesk

+0

我會這樣做的方式是創建所需的圖像,並在類似「map_walk_image.jpg」/「map_fish_image.jpg」時命名,然後每次使用URL中的類別創建imageMarker - > url =「map_ 「+類別+」 _ image.jpg的「; – ManseUK

+0

我會放棄。再次感謝 – Crashdesk