如果有必要,我正在尝试创建一个溢出地图的工具提示,但我无法弄明白。
我已经在这个guy的帮助下实现了工具提示,它就像一个魅力,除了当工具提示变大时它不会溢出地图框之外。
在我的创建标记方法中,我使用数据创建和填充标记,然后创建工具提示。
createMarker
function createMarker(number, currentMap, currentMapData) {
var marker = new MarkerWithLabel({
position:new google.maps.LatLng(currentMapData[0], currentMapData[1]),
map:currentMap,
icon:'/img/sticker/empty.png',
shadow:'/img/sticker/bubble_shadow.png',
transparent:'/img/sticker/bubble_transparent.png',
draggable:false,
raiseOnDrag:false,
labelContent:"" + number,
labelAnchor:new google.maps.Point(3, 30),
labelClass:"mapIconLabel", // the CSS class for the label
labelInBackground:false
});
var html = mapHtml(currentMapData[7], currentMapData[2], currentMapData[4], currentMapData[13], currentMapData[11], currentMapData[12], currentMapData[3], currentMapData[5])
var tooltipOptions = {marker:marker, content:html, cssClass:'tooltip', href:"/"+currentMapData[7]};
// create the tooltip
var tooltip = new Tooltip(tooltipOptions);
}
tooltip.js
function Tooltip(options) {
// Now initialize all properties.
this.marker_ = options.marker;
this.content_ = options.content;
this.map_ = options.marker.get('map');
this.cssClass_ = options.cssClass||null;
// We define a property to hold the content's
// div. We'll actually create this div
// upon receipt of the add() method so we'll
// leave it null for now.
this.div_ = null;
//Explicitly call setMap on this overlay
this.setMap(this.map_);
var me = this;
// Show tooltip on mouseover event.
google.maps.event.addListener(me.marker_, 'mouseover', function() {
me.show();
});
// Hide tooltip on mouseout event.
google.maps.event.addListener(me.marker_, 'mouseout', function() {
me.hide();
});
// When clicked move to href
google.maps.event.addListener(me.marker_, 'click', function() {
window.location.href = options.href;
});
}
// Now we extend google.maps.OverlayView()
Tooltip.prototype = new google.maps.OverlayView();
// onAdd is one of the functions that we must implement,
// it will be called when the map is ready for the overlay to be attached.
Tooltip.prototype.onAdd = function() {
// Create the DIV and set some basic attributes.
var div = document.createElement('DIV');
div.style.position = "absolute";
// Hide tooltip
div.style.visibility = "hidden";
if(this.cssClass_)
div.className += " "+this.cssClass_;
//Attach content to the DIV.
div.innerHTML = this.content_;
// Set the overlay's div_ property to this DIV
this.div_ = div;
// We add an overlay to a map via one of the map's panes.
// We'll add this overlay to the floatPane pane.
var panes = this.getPanes();
panes.floatPane.appendChild(this.div_);
}
// We here implement draw
Tooltip.prototype.draw = function() {
// Position the overlay. We use the position of the marker
// to peg it to the correct position, just northeast of the marker.
// We need to retrieve the projection from this overlay to do this.
var overlayProjection = this.getProjection();
// Retrieve the coordinates of the marker
// in latlngs and convert them to pixels coordinates.
// We'll use these coordinates to place the DIV.
var ne = overlayProjection.fromLatLngToDivPixel(this.marker_.getPosition());
// Position the DIV.
var div = this.div_;
div.style.left = ne.x + 'px';
div.style.top = ne.y + 'px';
}
// We here implement onRemove
Tooltip.prototype.onRemove = function() {
this.div_.parentNode.removeChild(this.div_);
}
// Note that the visibility property must be a string enclosed in quotes
Tooltip.prototype.hide = function() {
if (this.div_) {
this.div_.style.visibility = "hidden";
}
}
Tooltip.prototype.show = function() {
if (this.div_) {
this.div_.style.visibility = "visible";
}
}
我尝试在代码中设置this.div_.style.overflow = "visible";
并使用css但它不起作用。你知道我应该怎么做吗?
总结一下:如何让我的tooltop溢出地图?
答案 0 :(得分:2)
使用@ Dr.Molle的建议这里是google地图上溢出工具提示的基本模板。它应该为您提供一个开始,但是您希望在自己的实现中扩展它。这是一个jsfiddle演示,您可以使用它来跟进。
我做的第一件事就是创建一个div
来保存我在工具提示中所需的信息。接下来,将一些初始样式应用于此容器:
#marker-tooltip {
display: none;
position:absolute;
width: 300px;
height: 200px;
background-color: #ccc;
margin: 15px;
}
请注意,工具提示div
应与地图的div
包含在同一父容器中(以使定位正常工作)。
接下来我们要将工具提示中包含的信息存储在某个地方,我通过为名为marker
的{{1}}对象创建属性来实现此目的:
tooltipContent
然后,您希望能够将内容设置为工具提示marker.tooltipContent = 'this content should go inside the tooltip';
,并在用户鼠标悬停在div
上时显示 - 并且您可以使用map api的事件监听器{ {1}} marker
并使用mouseover
的{{1}}和marker
函数{1}}:
jQuery
现在,您有工具提示,其内容显示在$.html()
的{{1}}上 - 但是它位置不正确。这是棘手的部分。您需要找到$.show()
的{{1}}当前所在的地图google.maps.event.addListener(marker, 'mouseover', function () {
$('#marker-tooltip').html(marker.tooltipContent).show();
});
的像素坐标。幸运的是,地图api具有获取这些值的功能 - 为简单起见,我借用了here发布的解决方案。如果您对此背后的进一步阅读感兴趣,建议您从文档中的Map Coordinates部分开始。
无论如何,一旦你引用了该解决方案中提供的功能 - 你就可以获得标记的像素值:
mouseover
marker
等于地图上的水平像素值div
和marker
将等于地图latlng
上的垂直像素值。获得这些值后,可以使用var point = fromLatLngToPoint(marker.getPosition(), map);
方法相应地更改工具提示的绝对位置。所以听众将更新为:
point.x
当然,您应该在标记上添加div
事件的监听器以隐藏工具提示:
point.y