Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/459.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/sharepoint/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript Google Maps InfoWindows中的滚动位置更改错误是否有解决方案?_Javascript_Google Maps - Fatal编程技术网

Javascript Google Maps InfoWindows中的滚动位置更改错误是否有解决方案?

Javascript Google Maps InfoWindows中的滚动位置更改错误是否有解决方案?,javascript,google-maps,Javascript,Google Maps,我在一个网站上使用标准的内置InfoWindows功能()实现了Google地图。单击右上角的“X”关闭信息窗口时,只要您不在最顶端(window.scrollY==0),window.scrollY就会随着信息窗口的高度而改变。这是我在谷歌搜索问题时发现的一个JSFIDLE,稍加修改后,它很好地显示了这个问题 $(function () { demoMap = { initMap: function () { var myLatlng = new

我在一个网站上使用标准的内置InfoWindows功能()实现了Google地图。单击右上角的“X”关闭信息窗口时,只要您不在最顶端(window.scrollY==0),window.scrollY就会随着信息窗口的高度而改变。这是我在谷歌搜索问题时发现的一个JSFIDLE,稍加修改后,它很好地显示了这个问题

$(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();
})();
$(函数(){
demoMap={
initMap:function(){
var mylatng=newgoogle.maps.LatLng(41.097905,-73.405006);
变量myOptions={
缩放:16,
中心:myLatlng,
mapTypeId:google.maps.mapTypeId.ROADMAP
}
this.map=new google.maps.map(document.getElementById(“map_canvas”),myOptions);
这个.addMarker();
},
addMarker:函数(){
var self=这个;
var contentString=“”;
contentString+=“弗罗斯蒂先生的熟食和烧烤店”;
contentString+=“10第一街

Norwalk,CT 06855

(203)956-5767

”; var latlng=this.map.getCenter(); var marker=new google.maps.marker({ 位置:latlng, map:this.map, 标题:“Frosty先生的熟食和烧烤店” }); var infowindow=new google.maps.infowindow({ content:contentString, 真的吗 }); google.maps.event.addListener(标记'mouseover',函数(){ setOptions({pixelOffset:self.getInfowindowOffset(self.map,marker)}); 打开(self.map,marker); }); google.maps.event.addListener(标记'mouseout',函数(){ infowindow.close(); }); }, getInfowindowOffset:函数(映射、标记){ var center=this.getPixelFromLatLng(map.getCenter()), point=this.getPixelFromLatLng(marker.getPosition()), 象限=”, 抵消; 象限+=(点y>中心y)?“b”:“t”; 象限+=(x点<中心x)?“l”:“r”; 如果(象限==“tr”){ offset=新的google.maps.Size(-70185); }否则如果(象限=“tl”){ offset=新的google.maps.Size(70185); }else if(象限==“br”){ offset=新的google.maps.Size(-70,20); }否则如果(象限=“bl”){ offset=新的google.maps.Size(70,20); } 返回偏移量; }, getPixelFromLatLng:函数(latLng){ var projection=this.map.getProjection(); var点=从LATLNGTOPOINT(latLng)的投影; 返回点; } } initMap(); })();

如果在正文中添加一些高度(例如2000px)并从页面顶部滚动一点,然后单击关闭的信息窗口,它将按信息窗口的确切高度跳转页面。我认为这与这样一个事实有关:当您关闭元素时,Google会完全从DOM中删除它们,而不是简单地使用CSS类来显示/取消显示窗口


我在互联网上搜寻答案,但似乎没有人注意到,也没有人关心,因为这是一个小问题。我能想到的唯一解决方案是用window.scrollTo以InfoWindow的高度反方向改变滚动(我无法让实际的InfoWindow元素节点测量它当前的离地高度,所以我不得不强制所有InfoWindow都有一个特定的高度,以便在我的JS中设置相同的高度).

这只虫子快把我逼疯了,我很高兴我不是一个人:)


这并不是非常优雅,但我注意到当我手动触发
infowindow.close()
时,它并没有发生,只是在我实际单击默认的关闭按钮时。所以最后,我隐藏了关闭按钮,添加了我自己的带有
infowindow.setContent()
,并用它来关闭infowindow。

嘿,罗西,很高兴在这里看到答案。:)你的方法肯定比我的解决方法好。因此,如果我能让它发挥作用,我可能会把它作为正确的答案。如何从Javascript中选择自定义信息窗口元素以使用
infowindow.close()
?据我所知,GoogleMaps中的InfoWindow对象并不公开节点本身,而且由于元素在打开它们之前实际上不在DOM中,因此无法准确地选择它们。您是否在自定义元素上使用了直接onclick属性?好的,不用担心。我让它使用一个小的setTimeout,等待Google创建窗口。它不是很干净,但很管用您也可以简单地添加
overflow-anchor:none添加到地图的div元素:这是一个很好的解决方法,但IE不支持它。是的,你有道理。但是这个问题在IE中不存在/不可复制(或者至少在版本11中,我已经测试过了)。Hi@leonheess,我发布这个问题已经有一段时间了,但是你提供的链接似乎与这个问题不同。这个问题与InfoWindow的关闭有关,而不是在它打开时。我猜谷歌地图有很多不受欢迎的行为嗨@GregGaede,你说得对。总有一天我会很有希望学会读过书名。我撤回了我的接近票——改为向上投一票。