2013-08-22 21 views
1

这是我创建的jsfiddle Sample在同一个单页上的多个地图。不重复我自己,与对象的智能循环

我几乎总是“重复”自己,因为这种方式对我来说更容易阅读,我的JavaScript技能比初学者还好,还在学习中。

我知道我可以创建一个对象像

var maps ={ 
    ['latlng', 48.89376,2.33742], 
    ['latlng1', 40.73717,-73.9], 
    ['latlng2', -8.79069, 115.15927], 
} 

,使生活更轻松。但我不知道如何让对象工作。

这里是我的代码

function initialize() { 
     var latlng = new google.maps.LatLng(48.89376,2.33742); //1 location 
     var latlng1 = new google.maps.LatLng(40.73717,-73.98439); //2 location 
     var latlng2 = new google.maps.LatLng(-8.79069, 115.15927); //3 location 

     var settings = { 
      zoom: 15, 
      center: latlng, 
      disableDefaultUI: true, 
      zoomControl: true, 
      mapTypeId: google.maps.MapTypeId.ROADMAP 
     }; 
     var settings1 = { 
      zoom: 15, 
      center: latlng1, 
      disableDefaultUI: true, 
      zoomControl: true, 
      mapTypeId: google.maps.MapTypeId.ROADMAP 
     }; 

     var settings2 = { 
      zoom: 15, 
      center: latlng2, 
      disableDefaultUI: true, 
      zoomControl: true, 
      mapTypeId: google.maps.MapTypeId.ROADMAP 
     }; 

     var map = new google.maps.Map(document.getElementById("map"), settings); 
     var map1 = new google.maps.Map(document.getElementById("map1"), settings1); 
     var map2 = new google.maps.Map(document.getElementById("map2"), settings2); 

     var marker=new google.maps.Marker({ 
       position:latlng, 
       }); 
     marker.setMap(map); 

     var marker1 = new google.maps.Marker({ 
       position:latlng1, 
       }); 
     marker1.setMap(map1); 

     var marker2 = new google.maps.Marker({ 
       position:latlng2, 
       }); 
     marker2.setMap(map2); 
    } 


google.maps.event.addDomListener(window, 'load', initialize); 

如果有人可以帮助我的对象,以改善它也意味着会更容易添加更多的地图或在将来改变latlng。非常感谢

回答

1

尝试

function setup(el, lat, lng){ 
    var latlng = new google.maps.LatLng(lat, lng); //1 location 
    var settings = { 
     zoom: 15, 
     center: latlng, 
     disableDefaultUI: true, 
     zoomControl: true, 
     mapTypeId: google.maps.MapTypeId.ROADMAP 
    }; 

    var map = new google.maps.Map(document.getElementById(el), settings); 

    var marker=new google.maps.Marker({ 
     position:latlng, 
    }); 
    marker.setMap(map); 

    return marker; 
} 

function initialize() { 
    setup('map', 48.89376, 2.33742) 
    setup('map1', 40.73717, -73.98439) 
    setup('map2', -8.79069, 115.15927) 
} 


google.maps.event.addDomListener(window, 'load', initialize); 

演示:Fiddle

+0

非常感谢,但只显示一个,http://jsfiddle.net/ZxmX7/4/ ah' el'。 – olo

+0

@olo对不起'固定',硬编码'''''设置' –

+0

是的,我刚刚发现它在此期间。非常感谢 – olo

1

我做的一切都是在初始化函数,但是你可以很容易打破东西拆开包装不同的谷歌地图功能(即设置标志,显示地图等)。 http://jsfiddle.net/tYqa9/

function Map(lat,long,div) { 

    this.latlng = new google.maps.LatLng(lat,long); 
    this.div = div; 
    this.marker = new google.maps.Marker({ 
         position:this.latlng, 
        }); 
    this.settings = { 
     zoom: 15, 
     center: this.latlng, 
     disableDefaultUI: true, 
     zoomControl: true, 
     mapTypeId: google.maps.MapTypeId.ROADMAP 
    }; 
    this.map = new google.maps.Map(document.getElementById(this.div), this.settings); 
    this.marker.setMap(this.map); 

} 



function initialize() { 
    var latlng = [{lat:48.89376,lng:2.33742,div: 'Fred'}, 
      {lat:40.73717,lng:-73.98439,div:'George'}, 
      {lat:-8.79069,lng:115.15927,div:'Betty'}], 
     myMap = []; 
    for(i=0;i<latlng.length;i++) { 
     myMap.push(new Map(latlng[i].lat,latlng[i].lng,latlng[i].div)); 
    }   
} 


google.maps.event.addDomListener(window, 'load', initialize); 
+0

非常感谢您的答复。我正在从中吸取教训。但这种方式不适用于'div' ids不是'map','map1','map2' ..ID是独特的名称,如“娱乐”,“餐厅”,“锻炼”。 – olo

+0

易于更改。将div名称添加到数组并传递任何你想要的。 –