javascript/google maps:为什么我在哪里初始化我的地图(内部与外部函数)很重要
javascript/google maps: Why does it matter where I initialize my map (inside vs outside function)
简短摘要:当我将地图声明移出初始化标记并将其放置在谷歌地图上的函数时,我的地图失败并且根本没有任何标记。为什么在哪里声明我的地图很重要?
更长的版本:我想写一个通用函数,将两个数组的所有纬度和经度放在谷歌地图上。我正在使用以下内容:
var lat_array = <?php echo $slat.";"; ?>
var lon_array = <?php echo $slon.";"; ?>
var markers = []
function init_map(map) {
var myOptions = {
zoom: 14,
center: new google.maps.LatLng(<?php echo $latitude; ?>, <?php echo $longitude; ?>),
mapTypeId: google.maps.MapTypeId.ROADMAP
};
map = new google.maps.Map(document.getElementById("map-canvas"), myOptions);
marker = new google.maps.Marker({
map: map,
position: new google.maps.LatLng(<?php echo $latitude; ?>, <?php echo $longitude; ?>)
});
var bounds = new google.maps.LatLngBounds();
var myLatLng = new google.maps.LatLng(<?php echo $latitude; ?>, <?php echo $longitude; ?>);
bounds.extend(myLatLng);
var pinColor = "009ACD";
var pinImage = new google.maps.MarkerImage("http://chart.apis.google.com/chart?chst=d_map_pin_letter&chld=%E2%80%A2|" + pinColor,
new google.maps.Size(21, 34),
new google.maps.Point(0,0),
new google.maps.Point(10, 34));
for(var ii =0; ii<lat_array.length; ii++)
{
marker2 = new google.maps.Marker({
map: map,
position: new google.maps.LatLng(lat_array[ii], lon_array[ii]),
icon: pinImage
});
markers.push(marker2)
myNewLatLng = new google.maps.LatLng(lat_array[ii], lon_array[ii]);
bounds.extend(myNewLatLng);
}
map.fitBounds(bounds);
}
google.maps.event.addDomListener(window, 'load', init_map);
这工作正常。现在我想修改函数,通过在init_map外部声明地图并将其传递给init_map来使其更通用,以便我可以更轻松地在同一页面上制作许多不同的地图。但是,当我通过将映射声明移动到函数之外来修改代码时,如下所示:
var myOptions = {
zoom: 14,
center: new google.maps.LatLng(<?php echo $latitude; ?>, <?php echo $longitude; ?>),
mapTypeId: google.maps.MapTypeId.ROADMAP
};
map = new google.maps.Map(document.getElementById("map-canvas"), myOptions);
function init_map(map) {
marker = new google.maps.Marker({
map: map,
position: new google.maps.LatLng(<?php echo $latitude; ?>, <?php echo $longitude; ?>)
});
...
我的代码现在失败了。我在JS控制台中收到此错误,我不知道如何解释:
Uncaught InvalidValueError: setMap: not an instance of Map; and not an instance of StreetViewPanorama
这些术语都没有出现在我的代码中,所以我不知道如何解释它们。除了这个错误之外,现在我还有一张没有图钉的地图。
将映射声明移出我的函数有什么问题?感谢您的任何建议。
var myOptions = {
zoom: 14,
center: new google.maps.LatLng(<?php echo $latitude; ?>, <?php echo $longitude; ?>),
mapTypeId: google.maps.MapTypeId.ROADMAP
};
map = new google.maps.Map(document.getElementById("map-canvas"), myOptions);
function init_map(map) {
marker = new google.maps.Marker({
map: map,
position: new google.maps.LatLng(<?php echo $latitude; ?>, <?php echo $longitude; ?>)
});
在第一个示例中,您将创建选项和映射变量。但是,您正在破坏函数中的map
参数,并将其替换为指向 map-canvas 元素的参数。
当你将该声明移出函数体时,你不再破坏 map 参数;你依赖于它是一个有效的映射。
也许像
function init_map(map) {
if (!map) {
map = new google.maps.Map(document.getElementById("map-canvas"), myOptions);
}
...
相关文章:
- appendChild在函数外部工作,但在函数内部不工作
- 需要原型内部或外部的功能
- js和css文件-在publichtml外部或内部
- Cordova包装应用程序内部链接加载在应用程序中,外部链接加载在浏览器中
- 匿名自执行js函数内部的全局变量在外部仍然可用
- 从内部函数javascript内部分配外部函数的对象
- 将外部函数返回的id传递给内部函数
- 在内部JavaScript函数中包含外部对象
- 保持外部视图不变,而只是在angular ui中重新加载内部视图
- 访问内部功能范围的元素,而不是敲除中的外部
- 内部函数不会为外部函数在 jQuery 中动态创建的元素赋值
- 如何从许多内部非阻塞函数调用之一中提前退出外部函数
- 为什么内部Javascript循环会阻止外部循环中断(即无限循环)
- 如何使用Javascript调用外部库's函数内部的函数
- Javascript和CSS,内部HTML与外部文件
- JavaScript-如何将onload函数内部定义的变量取到外部
- CSS和Javascript可以在内部服务器上工作,但不能在外部工作
- 如何检测用户点击了内部或外部链接
- 强制定向布局从外部/内部数据链接获取特定数据
- 如何在页面上的所有其他脚本之前加载外部/内部javascript