谷歌地图v3:如何放下标记,删除,循环再次
google maps v3: how to drop markers, remove, loop again
我一直在学习谷歌地图,我想完成以下目标:
1)逐个放下标记;
2)删除最后一个标记(所以只有一个在视口中)
3)放下下一个标记
4)在每个标记处打开信息窗口
5)重复操作我一直试图扭曲动画代码并试图设置地图空(setMap(null)),但在调用drop函数后没有成功。有什么建议吗?底线:有这样的东西。当然,这有一个很大的额外的困难步骤,即从数据库中提取数据。
下面是代码。任何帮助都将不胜感激。
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title>Marker animations with <code>setTimeout()</code></title>
<style>
#map-canvas{
width:600px;
height:600px;
position: "absolute";
top: 0px;
left: 0px;
overflow: "hidden";
}
</style>
<script src="https://maps.googleapis.com/maps/api/js?v=3.exp&sensor=false"></script>
<script>
var berlin = new google.maps.LatLng(52.520816, 13.410186);
var neighborhoods = [
new google.maps.LatLng(52.511467, 13.447179),
new google.maps.LatLng(52.549061, 13.422975),
new google.maps.LatLng(52.497622, 13.396110),
new google.maps.LatLng(52.517683, 13.394393)
];
var markers = [];
var iterator = 0;
var Marker;
var map;
function initialize() {
var mapOptions = {
zoom: 12,
mapTypeId: google.maps.MapTypeId.ROADMAP,
center: berlin
};
map = new google.maps.Map(document.getElementById('map-canvas'),
mapOptions);
drop();
}
function drop(){
for (var i = 0; i < neighborhoods.length; i++) {
var m = neighborhoods[i];
(function(n){
setTimeout(function() {
addMarker(n);
}, i * 500);
}(m));
}
}
function addMarker() {
markers.push(new google.maps.Marker({
position: neighborhoods[iterator],
map: map,
draggable: false,
animation: google.maps.Animation.DROP
}));
iterator++;
}
google.maps.event.addDomListener(window, 'load', initialize);
</script>
</head>
<body>
<div id="map-canvas"></div>
</body>
</html
>
您想一次只显示一个标记吗?
下面是一些代码:
$(function() {
var BERLIN = new google.maps.LatLng(52.520816, 13.410186);
var NEIGBORHOODS = [
new google.maps.LatLng(52.511467, 13.447179),
new google.maps.LatLng(52.549061, 13.422975),
new google.maps.LatLng(52.497622, 13.396110),
new google.maps.LatLng(52.517683, 13.394393)];
var map = null;
var marker = null;
var index = 0;
var infoWindow = null;
function createMap() {
return new google.maps.Map(document.getElementById('map-canvas'), {
mapTypeId: google.maps.MapTypeId.ROADMAP,
center: BERLIN,
zoom: 12
});
}
function dropMarker(map, pos) {
return new google.maps.Marker({
map: map,
position: pos,
draggable: false,
animation: google.maps.Animation.DROP
});
}
function changeMarker() {
if (marker) {
infoWindow.close();
marker.setMap(null);
}
var pos = NEIGBORHOODS[index];
marker = dropMarker(map, pos);
infoWindow.setContent('lat: ' + pos.lat() + '<br />' + 'lng: ' + pos.lng());
setTimeout(function () {
infoWindow.open(map, marker);
}, 500);
index = (index + 1) % NEIGBORHOODS.length;
setTimeout(function () {
changeMarker();
}, 2000);
}
map = createMap();
infoWindow = new google.maps.InfoWindow()
changeMarker();
});
注意changeMarker()
函数如何工作,然后使用setTimeout()
再次调用自己。这建立了一个无限循环,changeMarker()
每两秒调用一次。
我使用setTimeout()
延迟显示信息窗口的半秒,所以它不会出现,直到下降完成。
jsfiddle演示
相关文章:
- AngularJs localStorage在循环中删除元素
- 使用 for 循环基于
id 从表中删除行 - Javascript删除循环
- NetSuite行项目删除内部循环问题
- javascript使用for循环从多个字符串中删除字符
- 从角度重复循环中的javascript对象中删除元素
- 循环后如何删除/隐藏图像
- PHP删除以前的循环数据
- 由添加/删除类组成的循环“动画”
- 在 Javascript 中循环并删除表单元素
- 如何删除 FOR EACH 循环中的第一个和最后一个值
- 中断语句仅删除第二个循环
- jQuery - 如何循环删除仅某些子节点
- 从对象中删除某些属性而不带循环
- 从循环中的克隆元素中删除元素时的奇怪行为
- 如何从 javascript 中的 foreach 循环中删除特定的数组元素
- 在循环中调用时不删除元素的拼接
- 使用行ID删除循环中的行'不能读取property '零# 39;
- 使用jQuery或javascript删除循环行内高度
- 需要删除循环在自动播放背景视频jquery