0

嗨,我有一个网络应用程序,我在其中集成了 gmap,它看起来类似于 Yelp gmap 服务。问题是,当我将鼠标悬停在标记上时,信息框卡在框中,如下所示:

在此处输入图像描述

信息框假设看起来像这样

在此处输入图像描述

以下是我当前用于集成 gmap 的代码

<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/infobox/src/infobox_packed.js"></script>

<script type="text/javascript">

    var gmap, gpoints = [];

    $(document).ready(function() {
        initialize();
    });

function initialize() {

        gmap = new google.maps.Map(document.getElementById('themap'), {
            zoom:               8,
            streetViewControl:  false,
            scaleControl:       false,
            center:             new google.maps.LatLng(3.3000000,101.9629796),
            mapTypeId:          google.maps.MapTypeId.ROADMAP
        });
 <?php
$content = '<p>Test</p>'; 
?>
 gpoints.push( new point(gmap, '<?php echo $lat; ?>', '<?php echo $long; ?>', '<?php echo $content; ?>') );
}

 function point(_map, lat, lng, content) {
        this.marker = new google.maps.Marker({
            position:           new google.maps.LatLng(lat,lng),
            map:                _map,
            zIndex: 11
        });
this.content = content;



        var gpoint = this;


        google.maps.event.addListener(gpoint.marker, 'mouseover', function() {
            popup(gpoint);
        });

google.maps.event.addListener(_map, 'zoom_changed', function() {
            center=gpoint.marker.getPosition();
            lat=center.lat();
            lng=center.lng();
           // alert(lat+"===="+lng);
        });    
}

 function popup(_point) {
        _point.popup = new InfoBox({
            content: _point.content,
            position:  _point.marker.getPosition(),
           // shadowStyle: 1,
            padding: 20,
            //backgroundColor: '#ddd',
            borderRadius: 10,
            arrowSize: 10,
            borderWidth: 1,
           // borderColor: '#dddddd',
            disableAutoPan: true,
            arrowPosition: 30,
           // backgroundClassName: 'phoney',
            arrowStyle: 2


        });

_point.popup.open(_point.marker.map, _point.marker);

        google.maps.event.addListener(_point.popup, 'domready', function() {                    
            google.maps.event.addDomListener(_point.marker, 'mouseout', function() {
                _point.popup.close();
            });
        });

}

</script>
4

1 回答 1

0

您可以使用pixelOffsetinfoBox 的选项来控制与标记相关的位置。

默认值为 0,0 ,这意味着 infoBox 的左上角粘在(标记的)位置上。

要将其放置在顶部+中心,您必须明确分配给信息框的内容,并应用 pixelOffset,如下所示:

pixelOffset:new google.maps.Size(-halfOfWidthOfTheBox,0)

当您不知道 infoBox 的大小时,您可以计算它。将此添加到domready-callback 的_point.popup

this.setOptions({pixelOffset:new google.maps
                             .Size(-parseInt(this.div_.offsetWidth/2,10),0)});
于 2013-01-09T12:22:52.737 回答