【发布时间】:2013-04-29 22:28:27
【问题描述】:
我有一个地图应用程序,并且我有在 document.ready() 时加载的标记,当我单击按钮时,我还有其他一些标记,但是当我单击按钮时,标记添加到文档中。 ready() 丢失了。
当点击按钮时,整个页面被提交并重新绘制。这也导致我的地图移动非常缩放和滚动速度很慢。有人可以帮忙。下面是我的代码。我想让页面运行得更快,我不想在每个 ajax 请求上都重新绘制它。
代码
<script type="text/javascript">
function initialize() {
var mapOptions = {
center: new google.maps.LatLng(10.670044,-61.515305),
zoom: 16,
mapTypeId: google.maps.MapTypeId.ROADMAP
};
var map = new google.maps.Map(document.getElementById("map_canvas"),mapOptions);
var criminal = new google.maps.MarkerImage('resources/icons/police_new.ico',
new google.maps.Size(100,106),
new google.maps.Point(0,0),
new google.maps.Point(50,50)
);
var companyPos = new google.maps.LatLng(10.670044,-61.515305);
var companyMarker = new google.maps.Marker({
position: companyPos,
map: map,
icon: criminal,
title:"First Criminal"
});
$.ajax({
type:'GET',
async:false,
global:'false',
url:'getListOfCrimeHotSpot.htm',
headers : {Accept: 'application/json'},
dataType: 'json'
}).done(function(hotspot){
$.each(hotspot, function(i,h){
var icon = 'resources/icons/information.ico';
new google.maps.Marker({
position:new google.maps.LatLng(h.lat,h.lng),
map:map,
icon: new google.maps.MarkerImage(icon, new google.maps.Size(100, 106), new google.maps.Point(0, 0), new google.maps.Point(50, 50)),
title: 'Crime Rating : ' + h.crimeLevel+' @ ' +h.crimeLevelCount+' / ' + h.totalNumberOfCrimes
});
});
});
return map;
}//end initialize
var global_citizens;
$(document).ready(function(){
map = initialize();
$('#startTracking').on('click',function(){
$.each(global_citizens, function(i, c) {
console.log(c.name );
});
});
$('#getCitizens').on('click', function() {
/*var mapOptions = {
center: new google.maps.LatLng(10.670044, -61.515305),
zoom: 16,
mapTypeId: google.maps.MapTypeId.ROADMAP
};*/
//map = new google.maps.Map(document.getElementById("map_canvas"), mapOptions);
$.ajax({
type: 'GET',
async : false,
global: 'false',
url: 'getListOfMarkers.htm',
headers : {Accept: 'application/json'},
dataType: 'json'
}).done(function(citizens) {
global_citizens = citizens;
var markerSource = [
null,
null,
'resources/icons/criminal_new.ico',
'resources/icons/victim_new.ico',
'resources/icons/suspect_new.ico'
];
$.each(citizens, function(i, c) {
//console.log(c.name + ' | ' + c.socialSecurityNumber + ' | ' + c.lat+ ' | ' +c.lng);
var icon = markerSource[c.citizenType];
if(markerSource) {
new google.maps.Marker({
position: new google.maps.LatLng(c.lat, c.lng),
map: map,
icon: new google.maps.MarkerImage( icon, new google.maps.Size(100, 106), new google.maps.Point(0, 0), new google.maps.Point(50, 50) ),
title: c.name +'-' +c.socialSecurityNumber
});
}
});
});
});
});
</script>
html
<body onload="initialize()">
<div id="map_canvas" style="width:100%; height:90%">
<!-- MAP GOES IN HERE -->
</div>
<div id="toolbar">
<button class="btn" id="getCitizens" onclick="" type="button">Get Citizens</button>
<button class="btn" id="startTracking" onclick="" type="button">Start Tracking</button>
</div>
</body>
【问题讨论】:
-
嘿,您已经发布了大量的 Javascript 代码,但是您能否发布它所处理的 HTML 部分,并且还可以通过步骤 1:执行此操作,步骤 2:然后执行操作。 . 有点;)
-
如果您有一些开发人员嗅探技能,请检查此网站是否使用 ajax 和一些重量级地图标记加载发生 visitdublin.com/map(我以前做过一次)如果您愿意我可以发布明天晚些时候(抱歉后 12-14 小时)基于此的答案。
-
@HarshBaid 谢谢我更新了包含html的问题
-
你能告诉我如何防止每次点击按钮时添加标记
-
@Harsh Baid 我得到了这个工作我在全局范围内创建了一个映射变量并继续使用它而不是每次都重新创建一个新变量。至于重复标记,我实现了 markerMaager 并使用了 markerManager.clearMarkers();它工作正常
标签: javascript jquery google-maps google-maps-markers