javascript - 隐藏谷歌地图标记,直到被复选框激活
问题描述
我设置了一个谷歌地图,它根据标记的类别过滤标记。但是,当您第一次登陆页面时,它们当前是可见的。一旦您触发了所有复选框过滤器,它们就会被隐藏。但是,我希望在您第一次登陆页面时隐藏标记,并且仅在由复选框过滤器触发时才可见。
这是我的代码:
var gmarkers1 = [];
var markers1 = [];
var infowindow = new google.maps.InfoWindow({
content: ''
});
// Our markers
markers1 = [
['0', 'Apple', 51.514227, -0.142056, 'shopping'],
['1', 'Title 1', 51.512424, -0.147783, 'hotels'],
['2', 'Title 2', 51.512164, -0.144521, 'culture'],
['3', 'Title 3', 51.511697, -0.144113, 'foodanddrink'],
['4', 'Title 4', 51.511817, -0.143566, 'shopping']
];
mp = [
['0', 51.512187, -0.144769, 'shopping']
];
/**
* Function to init map
*/
function initialize() {
var center = new google.maps.LatLng(51.5117389, -0.1452168);
var mapOptions = {
zoom: 16,
center: new google.maps.LatLng(51.5117389, -0.1452168),
mapTypeId: 'roadmap',
};
map = new google.maps.Map(document.getElementById('map-canvas'), mapOptions);
for (i = 0; i < markers1.length; i++) {
addMarker(markers1[i]);
}
for (i = 0; i < mp.length; i++) {
addMp(mp[i]);
}
}
/**
* Add Main Point Marker
*/
function addMp(marker) {
var pos = new google.maps.LatLng(marker[1], marker[2]);
var content = marker[1];
var icon = {
url: "../images/mp-marker.svg",
scaledSize: new google.maps.Size(60, 60),
anchor: new google.maps.Point(30, 30)
};
marker1 = new google.maps.Marker({
position: pos,
map: map,
icon: icon,
zIndex: 9999,
});
}
/**
* Function to add markers to map
*/
function addMarker(marker) {
var tip = marker[4];
var title = marker[1];
var pos = new google.maps.LatLng(marker[2], marker[3]);
var content = marker[1];
var icon = {
url: "../images/map-marker.svg",
scaledSize: new google.maps.Size(30, 30),
anchor: new google.maps.Point(15, 15)
};
marker1 = new google.maps.Marker({
title: title,
position: pos,
tip: tip,
map: map,
icon: icon
});
gmarkers1.push(marker1);
// Marker click listener
google.maps.event.addListener(marker1, 'click', (function(marker1, content) {
return function() {
console.log('Gmarker 1 gets pushed');
infowindow.setContent(content);
infowindow.open(map, marker1);
//map.panTo(this.getPosition());
//map.setZoom(17);
}
})(marker1, content));
}
var tipovi = document.getElementsByClassName('chk-btn').value;
var selectAllChecked = function() {
var checkedPlace = []
var allCheckedElem = document.getElementsByName('filter');
for (var i = 0; i < allCheckedElem.length; i++) {
if (allCheckedElem[i].checked == true) {
checkedPlace.push(allCheckedElem[i].value)//creating array of checked items
}
}
filterChecker(checkedPlace) //passing to function for updating markers
}
var filterChecker = function(tip) {
for (i = 0; i < markers1.length; i++) {
marker = gmarkers1[i];
if (in_array(this.marker.tip, tip) != -1) {
marker.setVisible(true);
} else {
marker.setVisible(false);
}
}
}
// Init map
initialize();
function in_array(needle, haystack) {
var found = 0;
for (var i = 0, len = haystack.length; i < len; i++) {
if (haystack[i] == needle) return i;
found++;
}
return -1;
}
HTML:
<ul class="map-nav">
<li class="map-nav__item js-fade-in-up">
<label class="switch">
<span>Shopping</span>
<input id="shopping-item" type="checkbox" name="filter" value="shopping" class='chk-btn' onclick="selectAllChecked();">
<div class="slider round"></div>
</label>
</li>
<li class="map-nav__item js-fade-in-up">
<label class="switch">
<span>Food and drink</span>
<input id="food-item" type="checkbox" name="filter" value="foodanddrink" class='chk-btn' onclick="selectAllChecked();">
<div class="slider round"></div>
</label>
</li>
<li class="map-nav__item js-fade-in-up">
<label class="switch">
<span>Hotels</span>
<input id="hotels-item" type="checkbox" name="filter" value="hotels" class='chk-btn' onclick="selectAllChecked();">
<div class="slider round"></div>
</label>
</li>
<li class="map-nav__item js-fade-in-up">
<label class="switch">
<span>Culture</span>
<input id="culture-item" type="checkbox" name="filter" value="culture" class='chk-btn' onclick="selectAllChecked();">
<div class="slider round"></div>
</label>
</li>
</ul>
解决方案
如果您不希望在选中复选框之前显示标记,请在选中复选框之前不要将它们添加到地图中。
创建标记时,不要设置map
属性。
function addMarker(marker) {
// snip (start of function)
marker1 = new google.maps.Marker({
title: title,
position: pos,
tip: tip,
icon: icon
});
// rest of function
当过滤器函数显示标记时,将其添加到地图或从地图中删除:
var filterChecker = function(tip) {
for (i = 0; i < markers1.length; i++) {
marker = gmarkers1[i];
if (in_array(this.marker.tip, tip) != -1) {
marker.setMap(map);
} else {
marker.setMap(null);
}
}
}
代码片段:
var gmarkers1 = [];
var markers1 = [];
var infowindow = new google.maps.InfoWindow({
content: ''
});
// Our markers
markers1 = [
['0', 'Apple', 51.514227, -0.142056, 'shopping'],
['1', 'Title 1', 51.512424, -0.147783, 'hotels'],
['2', 'Title 2', 51.512164, -0.144521, 'culture'],
['3', 'Title 3', 51.511697, -0.144113, 'foodanddrink'],
['4', 'Title 4', 51.511817, -0.143566, 'shopping']
];
mp = [
['0', 51.512187, -0.144769, 'shopping']
];
/**
* Function to init map
*/
function initialize() {
var center = new google.maps.LatLng(51.5117389, -0.1452168);
var mapOptions = {
zoom: 16,
center: new google.maps.LatLng(51.5117389, -0.1452168),
mapTypeId: 'roadmap',
};
map = new google.maps.Map(document.getElementById('map-canvas'), mapOptions);
for (i = 0; i < markers1.length; i++) {
addMarker(markers1[i]);
}
for (i = 0; i < mp.length; i++) {
addMp(mp[i]);
}
}
/**
* Add Main Point Marker
*/
function addMp(marker) {
var pos = new google.maps.LatLng(marker[1], marker[2]);
var content = marker[1];
var icon = {
url: "http://maps.google.com/mapfiles/ms/micons/green.png",
scaledSize: new google.maps.Size(60, 60),
anchor: new google.maps.Point(30, 30)
};
marker1 = new google.maps.Marker({
position: pos,
map: map,
icon: icon,
zIndex: 9999,
});
}
/**
* Function to add markers to map
*/
function addMarker(marker) {
var tip = marker[4];
var title = marker[1];
var pos = new google.maps.LatLng(marker[2], marker[3]);
var content = marker[1];
var icon = {
url: "http://maps.google.com/mapfiles/ms/micons/blue.png",
scaledSize: new google.maps.Size(30, 30),
anchor: new google.maps.Point(15, 15)
};
marker1 = new google.maps.Marker({
title: title,
position: pos,
tip: tip,
// map: map,
icon: icon
});
gmarkers1.push(marker1);
// Marker click listener
google.maps.event.addListener(marker1, 'click', (function(marker1, content) {
return function() {
console.log('Gmarker 1 gets pushed');
infowindow.setContent(content);
infowindow.open(map, marker1);
//map.panTo(this.getPosition());
//map.setZoom(17);
}
})(marker1, content));
}
var tipovi = document.getElementsByClassName('chk-btn').value;
var selectAllChecked = function() {
var checkedPlace = []
var allCheckedElem = document.getElementsByName('filter');
for (var i = 0; i < allCheckedElem.length; i++) {
if (allCheckedElem[i].checked == true) {
checkedPlace.push(allCheckedElem[i].value) //creating array of checked items
}
}
filterChecker(checkedPlace) //passing to function for updating markers
}
var filterChecker = function(tip) {
for (i = 0; i < markers1.length; i++) {
marker = gmarkers1[i];
if (in_array(this.marker.tip, tip) != -1) {
marker.setMap(map);
} else {
marker.setMap(null);
}
}
}
// Init map
initialize();
function in_array(needle, haystack) {
var found = 0;
for (var i = 0, len = haystack.length; i < len; i++) {
if (haystack[i] == needle) return i;
found++;
}
return -1;
}
/* Always set the map height explicitly to define the size of the div
* element that contains the map. */
#map-canvas {
height: 70%;
}
/* Optional: Makes the sample page fill the window. */
html,
body {
height: 100%;
margin: 0;
padding: 0;
}
<ul class="map-nav">
<li class="map-nav__item js-fade-in-up">
<label class="switch">
<span>Shopping</span>
<input id="shopping-item" type="checkbox" name="filter" value="shopping" class='chk-btn' onclick="selectAllChecked();">
<div class="slider round"></div>
</label>
</li>
<li class="map-nav__item js-fade-in-up">
<label class="switch">
<span>Food and drink</span>
<input id="food-item" type="checkbox" name="filter" value="foodanddrink" class='chk-btn' onclick="selectAllChecked();">
<div class="slider round"></div>
</label>
</li>
<li class="map-nav__item js-fade-in-up">
<label class="switch">
<span>Hotels</span>
<input id="hotels-item" type="checkbox" name="filter" value="hotels" class='chk-btn' onclick="selectAllChecked();">
<div class="slider round"></div>
</label>
</li>
<li class="map-nav__item js-fade-in-up">
<label class="switch">
<span>Culture</span>
<input id="culture-item" type="checkbox" name="filter" value="culture" class='chk-btn' onclick="selectAllChecked();">
<div class="slider round"></div>
</label>
</li>
</ul>
<div id="map-canvas"></div>
<!-- Replace the value of the key parameter with your own API key. -->
<script src="https://maps.googleapis.com/maps/api/js?key=AIzaSyCkUOdZ5y7hMm0yrcCQoCvLwzdM6M8s5qk">
</script>
推荐阅读
- python - 将 CSV 数据从 Google Storage 加载到 Bigquery 的 Python 代码?
- internet-explorer - IE 浏览器兼容性问题:Prime-ng Icons、Font-Awesome Icons 和 Clarity html
- java - Wildfly 上的 EJB 部署看不到休眠
- laravel - Laravel 应用程序无法在本地写入文件,使用 docker 抛出权限被拒绝
- ios - 将屏幕截图上传到 iTunes Connect
- c# - 在 C# 中,是否可以将应该由 String 的 format 方法格式化的对象作为数组传递?
- html - 是什么让最后一张照片与其他照片相比如此之大?
- vb.net - VB.NET如何用类似的程序控制多个控件
- windows - Powershell 脚本,用于搜索特定程序,然后输出是否已安装
- python - Python py不在其他PC上执行