谷歌地图 - 点击引脚后标记部分

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了谷歌地图 - 点击引脚后标记部分相关的知识,希望对你有一定的参考价值。

我有2面的页面 -

一方面我有部分。每个人都是旅行中的一天,其中包含文本和位置。另一方面,我有一个带有引脚的谷歌地图,引用了各个部分。

我想允许用户点击图钉,页面将滚动到相关部分,并用背景颜色绘制部分。

Ans也相反 - 当用户点击某个部分而不是相关的引脚会改变他的颜色。

我不确定如何使用Google-Maps ...

这是我的脚本代码:

<!-- Google map -->
    <script src="https://maps.googleapis.com/maps/api/js?key=fUA&callback=initMap" type="text/javascript"></script>
    <script type="text/javascript">
     var markers = [

            {
                "title": "Praho",
                "lat": "50.075538",
                "lng": "14.437801",
                "description": "Day: 1"
            }           
         , 
            {
                "title": "Český ráj",
                "lat": "50.586675",
                "lng": "15.157302",
                "description": "Day: 2"
            }           
         , 
            {
                "title": "Bešeňová",
                "lat": "49.100211",
                "lng": "19.434720",
                "description": "Day: 3"
            }           
            ];
    var infoWindows = []; // for open/close button

    var mapOptions = {
        center: new google.maps.LatLng(markers[0].lat, markers[0].lng),
        zoom: 7,
        mapTypeId: google.maps.MapTypeId.ROADMAP // HYBRID
    };
    var map = new google.maps.Map(document.getElementById("map-canvas"), mapOptions);   

    window.onload = function () {

        var infoWindow = new google.maps.InfoWindow();
        var lat_lng = new Array();
        var latlngbounds = new google.maps.LatLngBounds();
        for (i = 0; i < markers.length; i++) {
            var data = markers[i]
            var myLatlng = new google.maps.LatLng(data.lat, data.lng);
            lat_lng.push(myLatlng);
            var marker = new google.maps.Marker({
                position: myLatlng,
                map: map,
                title: data.title
            });

            latlngbounds.extend(marker.position);

            // open popup by click
            (function (marker, data) {
                google.maps.event.addListener(marker, "click", function (e) {
                    infoWindow.setContent(data.description);
                    infoWindow.open(map, marker);
                });
            })(marker, data);
            //


            // Open all popups
            var infowindow = new google.maps.InfoWindow({
                content: '<div id="iw-container">' +'<div class="iw-title">' + data.description + '</div>' + '</div>',
                maxWidth: 350
            });

        /*  google.maps.event.addListener(marker, 'mouseover', function () {
                infowindow.open(map, marker);
            });
        */  
            infowindow.open(map, marker);               
            //
            //Open/close infoWindow - Store all marker and infowindow in JSON array...
            var dict_map = {};
            dict_map['infoWinObj'] = infowindow;
            dict_map['markerObj'] = marker;

            //push JSON dict in array
            infoWindows.push(dict_map);               
            //  
        }
        map.setCenter(latlngbounds.getCenter());
    //  map.fitBounds(latlngbounds);

        //***********ROUTING****************//

        //Initialize the Path Array
        var path = new google.maps.MVCArray();

        //Initialize the Direction Service
        var service = new google.maps.DirectionsService();

        //Set the Path Stroke Color
        var poly = new google.maps.Polyline({ map: map, strokeColor: '#4986E7' });

    }

    function closeAllInfoWindows()
    {
        for (var i=0;i<infoWindows.length;i++) {
           if (infoWindows[i]['infoWinObj'])
              infoWindows[i]['infoWinObj'].close();
        }
    } 

    function openAllInfoWindows()
    {
        for (var i=0;i<infoWindows.length;i++) {                   
              infoWindows[i]['infoWinObj'].open(map, infoWindows[i]['markerObj']);
        }
    }   

    </script>
答案

我刚做了一个基本的演示。

主要想法是panTo()标记和scrollTop()到您点击的日期块。

编辑:在日信息数组中包含标题和内容。现在你可以在infowindow建立你想要的东西了。

var map;
var StartPoint = new google.maps.LatLng(50, 10);

var DayInfo = [{
    ID: "day1",
    Title: "Title1",
    Content: "Content1",
    Location: new google.maps.LatLng(51.72977747627091, 6.605224609375),
  },
  {
    ID: "day2",
    Title: "Title2",
    Content: "Content2",
    Location: new google.maps.LatLng(52.78551578550006, 13.460693359375),
  },
  {
    ID: "day3",
    Title: "Title3",
    Content: "Content3",
    Location: new google.maps.LatLng(50.292175137097736, 14.32861328125),
  },
  {
    ID: "day4",
    Title: "Title4",
    Content: "Content4",
    Location: StartPoint
  }
]

var DaysMarker = [];

function initialize() {
  var mapOptions = {
    center: StartPoint,
    zoom: 7,
    mapTypeId: google.maps.MapTypeId.ROADMAP
  };

  map = new google.maps.Map(document.getElementById("map"), mapOptions);

  DayInfo.forEach(function(dayInfo, index) {
    var marker = new google.maps.Marker({
      position: dayInfo.Location,
      map: map,
      isOpended: false,

      Open: function() {
        if (!this.isOpended) {
          this.infowindow.open(map, marker)
          this.isOpended = true
        }
        map.panTo(this.position)
      }
    })

    marker.infowindow = new google.maps.InfoWindow({
      content: '<div id="iw-container">' +
        '<h1>' + dayInfo.Title + '</h1>' +
        '<div class="iw-title">' +
        'Day' + (index + 1) + '<br>' +
        dayInfo.Content +
        '</div>' + '</div>',
      maxWidth: 350
    });

    marker.addListener('click', function() {
      if (this.isOpended) {
        this.infowindow.close()
        this.isOpended = false
      } else {
        this.Open()
        // var offsetTop = $('.day').get(index).offsetTop;
        $('html, body').animate({
          // scrollTop: offsetTop
          scrollTop: $('#' + dayInfo.ID).offset().top
        }, '500');
      }
    })

    DaysMarker.push(marker)
  })
}

$(function() {
  initialize()

  $('.day').on('click', function() {
    var index = $(this).index();
    DaysMarker[index].Open()
    // var offsetTop = $('.day').get(index).offsetTop;
    $('html, body').animate({
      // scrollTop: offsetTop
      scrollTop: $(this).offset().top
    }, '500');
  })
})
* {
  padding: 0;
  margin: 0;
}

body>div {
  position: relative;
  height: 100vh;
  vertical-align: top;
}

#map {
  width: 70%;
  position: fixed !important;
  right: 0;
  top: 0;
}

#days {
  margin-left: -4px;
  width: 30%;
  display: inline-block;
}

.day {
  height: 100vh;
  outline: 1px blue solid;
}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<script src="https://maps.googleapis.com/maps/api/js"></script>


<div id="days">
  <div id="day1" class="day">Day1</div>
  <div id="day2" class="day">Day2</div>
  <div id="day3" class="day">Day3</div>
  <div id="day4" class="day">Day4</div>
</div>
<div id="map"></div>

以上是关于谷歌地图 - 点击引脚后标记部分的主要内容,如果未能解决你的问题,请参考以下文章

将引脚放在片段中的地图片段上

如何更改谷歌地图标记上方的标题和片段设计

InfoWindow中的Android Google地图摘要自动更新

谷歌地图打开标记点击活动

谷歌地图infowindow关闭不工作

不同外部链接的谷歌地图标记点击功能问题