addListener Проблема непроверяет функцию, пока не будет движения зуммера
Есть код :
var mapOptions = { zoom: 12, center: new google.maps.LatLng(Lat, Lng) }
var MARKER = new MarkerWithLabel({ map: map, ...});
var CENTER = new MarkerWithLabel({ map: map, ...}); // jquery 3.3.1
google.maps.event.addListener(map, 'zoom_changed', function() {
var zoomen = map.getZoom();
MARKER.setVisible(zoomen >= 15 && zoomen <= 17); // все тут работает, но не при первом запуске карты!
CENTER.setVisible(zoomen < 15); // Меняют zoom, и MARKER пропадает, хотя его и не должно быть!
}
Проблема в том, что метки все равно показываются на экране, хотя есть функция для их фильтрации. Фильтрация работает лишь тогда, когда я меняю zoom. Читал что нужно использовать не addListener, а addListenerOnce, но тоже не работает! Так же видел комментарий, что это происходит из-за слушателя zoom_changed. Возможно это чем то поможет. Прошу помочь, никак ответ найти не могу, как решается.
Ответы (1 шт):
Автор решения: Igor
→ Ссылка
var mapOptions = { zoom: 12, center: new google.maps.LatLng(Lat, Lng) }
var MARKER = new MarkerWithLabel({ map: map, ...});
var CENTER = new MarkerWithLabel({ map: map, ...});
google.maps.event.addListener(map, 'zoom_changed', zoomChange);
zoomChange();
function zoomChange() {
var zoomen = map.getZoom();
MARKER.setVisible(zoomen >= 15 && zoomen <= 17);
CENTER.setVisible(zoomen < 15);
}
объяснение этому решению
В Вашем коде Вы только прикрепляете обработчик события к карте, но не вызываете его. Может быть, у карты есть метод для вызова событий, что-то вроде:
var mapOptions = { zoom: 12, center: new google.maps.LatLng(Lat, Lng) }
var MARKER = new MarkerWithLabel({ map: map, ...});
var CENTER = new MarkerWithLabel({ map: map, ...});
google.maps.event.addListener(map, 'zoom_changed', function() {
var zoomen = map.getZoom();
MARKER.setVisible(zoomen >= 15 && zoomen <= 17);
CENTER.setVisible(zoomen < 15);
});
map.trigger(new Event("zoom_changed")); // ???
Тогда можно обойтись без именованой функции.