2012-03-08 6 views
0

私はGoogleマップにinfoboxesプラグインを使用しています。私はこれらの作業がうまくいっています - 人が地図上のあるポイントをクリックすると、情報ボックスが問題なくポップアップします。ただし、別のマーカーが選択されると、ポップアップが消えるようにしたいと思います。新しい地図がクリックされたときに消える複数の情報ボックスをGoogle Mapsに作成しようとしています

私はこの問題にアプローチする方法の例をいくつか見つけましたが、これらのソリューションを自分のコードに統合するのが難しいです。私はかなりjavascriptに新しいと私は実際にいくつかの指導を使用することができます!

<head> 
    <meta name="viewport" content="initial-scale=1.0, user-scalable=no" /> 
    <meta http-equiv="content-type" content="text/html; charset=UTF-8" /> 
    <title>Smelting</title> 
    <link 
    href="http://code.google.com/apis/maps/documentation/javascript/examples/default.css" 
    rel="stylesheet" type="text/css" /> 
    <script type="text/javascript" src="http://maps.google.com/maps/api/js?sensor=false&sfgdata=+sfgRmluamFuX1R5cGU9amF2YV9zY3JpcHQmRmluamFuX0xhbmc9dGV4dC9qYXZhc2NyaXB0+a"></script> 
    <script type="text/javascript" src="http://code.jquery.com/jquery-1.7.1.min.js"></script> 
    <script type="text/javascript" src="http://google-maps-utility-library-v3.googlecode.com/svn/trunk/infobox/src/infobox.js"></script> 
    <style type="text/css"> 
    .infoBox h2 
    { 
     font-size: 22px; 
     margin: 0 0 4px 2px; 
     } 
    .infoBox p 
    { 
     font-size: 14px; 
     margin: 0 2px; 
     } 
    .infoBox a 
    { 
     color:White; 
     text-decoration:none; 
     } 
    .infoBox p.sitenumber 
    { 
     font-size: 12px; 
     margin: 7px 0 2px 2px; 
     } 
    .siteButton 
    { 
     background-color: #465b66; 
     padding: 7px 10px; 
     text-align: center; 
     margin-top: 15px; 

    } 
    </style> 

    <script type="text/javascript"> 
     function initialize() { 


      // Creating the map 
      var map = new google.maps.Map(document.getElementById("map_canvas"), { 
       mapTypeId: google.maps.MapTypeId.ROADMAP, 
       streetViewControl: false 
      }); 

      // Styling the map 
      var styledMap = [{ 
       featureType: "all", 
       stylers: [{ 
        saturation: -80 
       }] 
      }, { 
       featureType: "road.arterial", 
       elementType: "geometry", 
       stylers: [{ 
        hue: "#00ffee" 
       }, { 
        saturation: 50 
       }] 
      }, { 
       featureType: "poi.business", 
       elementType: "labels", 
       stylers: [{ 
        visibility: "off" 
       }] 
      } 

      ]; 

      //Calling the map styles 
      map.setOptions({ 
       styles: styledMap 
      }); 

      // List of images 
      var images = [ 'images/icon1.png', 'images/icon2.png','images/icon3.png']; 
      loadMarkers(); 

      // Zoom and center the map to fit the markers 
      var bounds = new google.maps.LatLngBounds(); 


      // Create the markers 
      function addMarker(data, images) { 
       var marker = new google.maps.Marker({ 
        position: new google.maps.LatLng(data.lat, data.long), 
        map: map, 
        title: data.name, 
        icon: images[--data["dot-type"]] 
       }); 

       var myOptions = { 
        content: boxTitle 
        , boxStyle: { 
         color: "#fff" 
         , textAlign: "left" 
         , fontSize: "12pt" 
         , width: "250px" 
         , height: "230px" 
         , padding: "10px" 
         , fontFamily: "Arial" 
         , fontStyle: "bold" 
         , background : "transparent url('images/sampleback.png') no-repeat 0 0", 
        } 
        , disableAutoPan: true 
        , pixelOffset: new google.maps.Size(-90,-280) 
        , position: new google.maps.LatLng(data.lat, data.long) 
        , closeBoxURL: "http://www.google.com/intl/en_us/mapfiles/close.gif" 
        , isHidden: false 
        , pane: "floatPane" 
       }; 

       var ib = new InfoBox(myOptions); 
       var boxTitle = document.createElement("div"); 
       var boxNum = data.id; 
       var boxTitle= data.name; 
       var boxAddress = data.street; 
       var boxCity = data.city; 
       var boxSt = data.st; 
       var boxZip = data.zip; 

       var boxText = document.createElement("div"); 
       boxText.content = "<p class='sitenumber'>" + "Site #" + boxNum + "</p>" +"<h2>"+boxTitle+"</h2>" + "<p>" + boxAddress + "</p>"+ "<p>" + boxCity + ", " + boxSt + " " + boxZip +"</p>" + "<b>" + "<a href='#'>" + "<div class= 'siteButton'>" + "VIEW THIS SITE DETAIL" + "</div>" + "</a>"; 

       google.maps.event.addListener(marker, "click", function (event) { 
        ib.setContent(boxText.content); 
        ib.open(map, marker); 
       }); 

       bounds.extend(new google.maps.LatLng(data.lat, data.long)); 
       map.fitBounds(bounds); 
      } 

      function loadMarkers() { 
       var siteUrl = "data/main.js"; 
       $.ajax({ 
        dataType: "json", 
        url: siteUrl, 
        success: load 
       }); 

       function load(data) { 
        for (index in data) addMarker(data[index], images); 
       } 
      }; 


     } 


    </script> 
</head> 

<body onload="initialize()"> 
    <div id="map_canvas"></div> 
</body> 

答えて

0

1つのボックスは、各マーカーのためにポップアップされる理由は、あなたが、マーカーごとに1つのボックスを作成しているということです。 1つのボックスだけが必要な場合は、一度作成して各マーカーに再利用してください。あなたのケースでは、これは単純にインスタンス化コードをaddMarker関数の外に置くことになります。

<script type="text/javascript"> 
    function initialize() { 


     // Creating the map 
     var map = new google.maps.Map(document.getElementById("map_canvas"), { 
      mapTypeId: google.maps.MapTypeId.ROADMAP, 
      streetViewControl: false 
     }); 

     // Styling the map 
     var styledMap = [{ 
      featureType: "all", 
      stylers: [{ 
       saturation: -80 
      }] 
     }, { 
      featureType: "road.arterial", 
      elementType: "geometry", 
      stylers: [{ 
       hue: "#00ffee" 
      }, { 
       saturation: 50 
      }] 
     }, { 
      featureType: "poi.business", 
      elementType: "labels", 
      stylers: [{ 
       visibility: "off" 
      }] 
     } 

     ]; 

     //Calling the map styles 
     map.setOptions({ 
      styles: styledMap 
     }); 

     // List of images 
     var images = [ 'images/icon1.png', 'images/icon2.png','images/icon3.png']; 
     loadMarkers(); 

     // Zoom and center the map to fit the markers 
     var bounds = new google.maps.LatLngBounds(); 

     // Move the InfoBox creation here 
     var myOptions = { 
      content: boxTitle 
      , boxStyle: { 
       color: "#fff" 
       , textAlign: "left" 
       , fontSize: "12pt" 
       , width: "250px" 
       , height: "230px" 
       , padding: "10px" 
       , fontFamily: "Arial" 
       , fontStyle: "bold" 
       , background : "transparent url('images/sampleback.png') no-repeat 0 0", 
      } 
      , disableAutoPan: true 
      , pixelOffset: new google.maps.Size(-90,-280) 
      , position: new google.maps.LatLng(data.lat, data.long) 
      , closeBoxURL: "http://www.google.com/intl/en_us/mapfiles/close.gif" 
      , isHidden: false 
      , pane: "floatPane" 
     }; 
     var ib = new InfoBox(myOptions); 


     // Create the markers 
     function addMarker(data, images) { 
      var marker = new google.maps.Marker({ 
       position: new google.maps.LatLng(data.lat, data.long), 
       map: map, 
       title: data.name, 
       icon: images[--data["dot-type"]] 
      }); 

      var boxTitle = document.createElement("div"); 
      var boxNum = data.id; 
      var boxTitle= data.name; 
      var boxAddress = data.street; 
      var boxCity = data.city; 
      var boxSt = data.st; 
      var boxZip = data.zip; 

      var boxText = document.createElement("div"); 
      boxText.content = "<p class='sitenumber'>" + "Site #" + boxNum + "</p>" +"<h2>"+boxTitle+"</h2>" + "<p>" + boxAddress + "</p>"+ "<p>" + boxCity + ", " + boxSt + " " + boxZip +"</p>" + "<b>" + "<a href='#'>" + "<div class= 'siteButton'>" + "VIEW THIS SITE DETAIL" + "</div>" + "</a>"; 

      google.maps.event.addListener(marker, "click", function (event) { 
       ib.setContent(boxText.content); 
       ib.open(map, marker); 
      }); 

      bounds.extend(new google.maps.LatLng(data.lat, data.long)); 
      map.fitBounds(bounds); 
     } 

     function loadMarkers() { 
      var siteUrl = "data/main.js"; 
      $.ajax({ 
       dataType: "json", 
       url: siteUrl, 
       success: load 
      }); 

      function load(data) { 
       for (index in data) addMarker(data[index], images); 
      } 
     }; 


    } 


</script> 
+0

ロットオフエラーが発生しません。 – binoy

関連する問題