根据ID切换谷歌地图标记

时间:2015-07-30 16:03:38

标签: javascript php google-maps laravel google-maps-api-3

我有一张地图,通过for loop显示标记。

function map_view_initialize() {
        var properties = <?php echo is_array($properties) ? json_encode($properties) : $properties; ?>;
        var index;
        var mapOptions = {
            center: {lat: 32.752601, lng: 9.801254},
            zoom: 12,
        };

        var map = new google.maps.Map(document.getElementById('map_view_canvas'),
                mapOptions);
        infowindow = new google.maps.InfoWindow();
        for (var index = 0; index < properties.length; index++) {

            var latlng = new google.maps.LatLng(properties[index].property_latitude, properties[index].property_longitude);
            var agent = properties[index].agent_firstname + ' ' + properties[index].agent_lastname;
            var propertyName = properties[index].property_name;
            var agentId = properties[index].agent_id;
            var propertyLocation = properties[index].location_name;
            var owner = properties[index].owner_firstname + ' ' + properties[index].owner_lastname;
            var ownerTel = properties[index].owner_telephone_number;
            var markerContent = "<div><h4>" + propertyName + "</h4>\n\
            <h5>Location: " + propertyLocation + "</h5>\n\
            <p>" + owner + " " + ownerTel + "</p>\n\
            </div>";

            var marker = new MarkerWithLabel({
                agent:agentId,
                position: latlng,
                map: map,
                labelContent: agent,
                labelAnchor: new google.maps.Point(22, 0),
                labelClass: "labels",
                labelStyle: {opacity: 0.75}
            });

            marker.content = markerContent;

            var infoWindow = new google.maps.InfoWindow();
            google.maps.event.addListener(marker, 'click', function () {
                infoWindow.setContent(this.content);
                infoWindow.open(this.getMap(), this);
            });
        }
 }

我还有一组与每个标记的agentId属性相关的按钮。

@foreach($agents as $agent)
   <button id="{{$agent->person_id}}" onclick="filterMarkers(this.id);" type='button' class='btn btn-success btnMargin btn-xs'>{{$agent->agent_lastname}} {{$agent->agent_firstname}}</button>          
@endforeach  

当我按下其中一个按钮时,此功能运行

function filterMarkers(agentId){
                var element = document.getElementById(agentId);
                var cls = hasClass(element,'notActive');

                if(!cls){
                    element.classList.add("notActive");
                    element.style.opacity = 0.5;
                }
                else if(cls){
                    element.classList.remove("notActive");
                    element.style.opacity = 1;  
                }
}

我想通过使用我的按钮来切换每个标记的可见性(请参阅第二个代码块)。例如,当我按下id=1按钮时,我需要隐藏/显示agentId属性等于1的标记。

1 个答案:

答案 0 :(得分:3)

您需要与agentId关联的标记索引,例如(在全局区域中定义):

 var markerIndex=[];

在循环中,您必须为每个agentId设置关联的标记

markerInded[agentId]=marker

并且要切换标记,您需要隐藏功能并显示标记,例如

toggleMarkerOff(agentId){
  markerIndex[agentId].setMap(null); 
}
toggleMarkerOff(agentId){
  markerIndex[agentId].setMap(map); 
}

然后你可以在相关的元素事件中调用prpoer函数