gpt4 book ai didi

javascript - 是否有针对 Google Maps InfoWindows 滚动位置更改错误的修复?

转载 作者:行者123 更新时间:2023-12-04 09:15:03 24 4
gpt4 key购买 nike

我使用标准的内置 InfoWindows 功能 ( https://developers.google.com/maps/documentation/javascript/infowindows ) 在网站上实现了 Google map 。当通过单击右上 Angular 的“X”关闭 InfoWindow 时,window.scrollY 将根据 InfoWindow 的高度进行更改,只要您不在最顶部(window.scrollY == 0) .这是我在谷歌搜索问题时发现的一个 jsfiddle,当稍微修改时,可以很好地显示问题。

$(function () {
demoMap = {
initMap: function () {
var myLatlng = new google.maps.LatLng(41.097905, -73.405006);
var myOptions = {
zoom: 16,
center: myLatlng,
mapTypeId: google.maps.MapTypeId.ROADMAP
}
this.map = new google.maps.Map(document.getElementById("map_canvas"), myOptions);

this.addMarker();
},

addMarker: function () {
var self = this;
var contentString = "<div id='content'>";
contentString += "<div id='title'>Mr. Frosty's Deli and Grill</div>";
contentString += "<div id='info'><p>10 1st Street</p><p>Norwalk, CT 06855</p><p>(203) 956-5767</p><p><a href='http://thebeachburger.com/'>thebeachburger.com‎</a></p></div></div>";

var latlng = this.map.getCenter();

var marker = new google.maps.Marker({
position: latlng,
map: this.map,
title: "Mr. Frosty's Deli and Grill"
});

var infowindow = new google.maps.InfoWindow({
content: contentString,
disableAutoPan: true
});

google.maps.event.addListener(marker, 'mouseover', function () {
infowindow.setOptions({pixelOffset : self.getInfowindowOffset(self.map, marker)});
infowindow.open(self.map, marker);
});
google.maps.event.addListener(marker, 'mouseout', function () {
infowindow.close();
});
},

getInfowindowOffset: function (map, marker) {
var center = this.getPixelFromLatLng(map.getCenter()),
point = this.getPixelFromLatLng(marker.getPosition()),
quadrant = "",
offset;
quadrant += (point.y > center.y) ? "b" : "t";
quadrant += (point.x < center.x) ? "l" : "r";
if (quadrant == "tr") {
offset = new google.maps.Size(-70, 185);
} else if (quadrant == "tl") {
offset = new google.maps.Size(70, 185);
} else if (quadrant == "br") {
offset = new google.maps.Size(-70, 20);
} else if (quadrant == "bl") {
offset = new google.maps.Size(70, 20);
}

return offset;
},

getPixelFromLatLng: function (latLng) {
var projection = this.map.getProjection();
var point = projection.fromLatLngToPoint(latLng);
return point;
}
}

demoMap.initMap();
})();
http://jsfiddle.net/svigna/SJCNp/
如果您为正文添加一些高度(例如 2000 像素)并从页面顶部滚动一点,然后单击关闭的 InfoWindow,它将向下跳到页面 InfoWindow 的确切高度。我认为这与当您关闭元素时 Google 从 DOM 中完全删除元素有关,而不是简单地使用 CSS 类来显示/取消显示窗口。
我在互联网上搜索了答案,但似乎没有人注意到它,或者没有人关心它,因为这是一个小问题。我能想到的唯一解决方案是通过 InfoWindow 的高度在相反方向使用 window.scrollTo 来抵消 scrollY 变化(我无法获得实际的 InfoWindow 元素节点来测量它的当前 offsetHeight,所以我不得不强制所有InfoWindows 具有特定高度以在我的 JS 中设置相同的高度)。

最佳答案

这个错误一直让我发疯,我很高兴我并不孤单:)
这不是 super 优雅,但我注意到当我触发时没有发生 infowindow.close()手动,仅当我实际单击默认关闭按钮时。所以最后,我隐藏了关闭按钮,添加了我自己的 infowindow.setContent() ,并用它来关闭信息窗口。

关于javascript - 是否有针对 Google Maps InfoWindows 滚动位置更改错误的修复?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/63265569/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com