Я создаю карту с сотнями маркеров и информационных окон, связанных с каждым из них. Я использую пользовательский значок вместо стандартного и кластеризатор маркеров для ускорения загрузки.

В каждом информационном окне есть ссылка, которая ведет на определенную статью. Чтобы открыть эту статью, необходимо выполнить два действия:

  1. Вы должны нажать на маркер
  2. Откроется информационное окно, вы увидите название статьи, и вам нужно щелкнуть по названию (это ссылка), чтобы открыть статью.

Я хотел бы избежать одного клика. Возможно ли иметь текстовый маркер (вместо того, чтобы видеть пользовательский значок) - вы бы видели текст «статья 1», а при нажатии на нее открывается «статья 1»?

Вот часть моего кода:

<head>
<script type="text/javascript" src="http://maps.google.com/maps/api/js?sensor=false"></script> 
<script type="text/javascript" src="http://google-maps-utility-library-v3.googlecode.com/svn/trunk/markerclusterer/src/markerclusterer.js"></script>
<script type="text/javascript"> 
var map = null;
var markerArray = []; //create a global array to store markers
var myPoints = [

[1, 1, 'Article 1'],
[2, 2, 'Article 2'],
[3, 3, 'Article 3'],

];
//create global array to store points

function initialize() {
    var myOptions = {
        zoom: 5,
        center: new google.maps.LatLng(2, 2),
        mapTypeControl: true,
        mapTypeControlOptions: {
            style: google.maps.MapTypeControlStyle.DROPDOWN_MENU
        },
        navigationControl: true,
        mapTypeId: google.maps.MapTypeId.ROADMAP
    }
    map = new google.maps.Map(document.getElementById("map_canvas"), myOptions);

    var mcOptions = {
        gridSize: 10,
        maxZoom: 15
    };
    var mc = new MarkerClusterer(map, [], mcOptions);

    google.maps.event.addListener(map, 'click', function() {
        infowindow.close();
    });

    // Add markers to the map
    // Set up markers based on the number of elements within the myPoints array
    for(var i=0; i<myPoints.length; i++){
         createMarker(new google.maps.LatLng(myPoints[i][0], myPoints[i][1]), myPoints[i][2]);
    }

    mc.addMarkers(markerArray , true);
}

var infowindow = new google.maps.InfoWindow({
    size: new google.maps.Size(150, 50)
});

var image = '/321.png';
function createMarker(latlng, html) {
    var contentString = html;
    var marker = new google.maps.Marker({
        position: latlng,
        map: map,
        icon:image,
        zIndex: Math.round(latlng.lat() * -100000) << 5
    });

    google.maps.event.addListener(marker, 'click', function() {
        infowindow.setContent(contentString);
        infowindow.open(map, marker);
    });

    markerArray.push(marker); //push local var marker into global array
}

window.onload = initialize;
</script> 
</head>
3
take2 19 Мар 2011 в 15:03

1 ответ

Невозможно заменить маркер текстом, по крайней мере, на данный момент, команда Google Maps может добавить эту функцию в ближайшем будущем.

Чтобы обойти эту проблему двойного щелчка, вы можете показать информационное окно, когда пользователь наводит указатель мыши на маркер, и когда пользователь щелкает маркер, ему будет предложено открыть статью/страницу.

Вы можете заглянуть в разделы событий для получения дополнительной информации об обработке событий для маркера. Маркер Google Maps, вам придется немного прокрутить вниз, чтобы увидеть события раздел.

Надеюсь это поможет.

1
Saad Ulde 9 Фев 2013 в 18:30