OpenLayers: создание тултипов
Добавлено: 13 ноя 2010, 19:32
Хочу поделиться способом создания тултипов, подсмотренным здесь. Судя по всему приведенный по ссылке код позиционирования тултипов в окне карты предназначен для точечных объектов, так как у полигонов нет свойств x и y:
Адаптируем данный код для показа тултипов полигональных слоёв. Требуется библиотека jQuery.
0. CSS стиль будущего тултипа:
1. Подключаем jQuery:
2. Cоздаём переменную, в которой будут хранится координаты текущего положения мыши:
3. Создаём объект для работы с тултипами:
4. Формируем содержимое тултипа. В функцию передаётся объект feature и из него извлекается значение свойства 'attrname':
5. Добавляем тултип на карту. currPos.x и currPos.y - координаты текущего положения мыши, откуда они берутся покажем ниже:
6. Удаление тултипа с карты:
7. Для получения значений текущего положения мыши, добавляем в объект map следующие строки:
8. Будем вызывать функции добавления и удаления тултипов из контрола SelectFeature:
P.S. Метод опробован, в принципе все работает, но есть маленькая проблема. Если подскажете как ее решить - буду признателен. Если в контроле SelectFeature стоит hover:true, то при наведении мыши на объект он подсвечивается и появляется тултип, но если, не выходя за рамки выделенного объекта поместить указатель мыши на этот тултип - выделение объекта снимается и соответственно тултип пропадает. Если решим проблему - можно будет перенести этот топик в рецепты.
Код: Выделить всё
var point = new OpenLayers.LonLat(feature.geometry.x, feature.geometry.y)
Адаптируем данный код для показа тултипов полигональных слоёв. Требуется библиотека jQuery.
0. CSS стиль будущего тултипа:
Код: Выделить всё
.openlayers-tooltip {
font-family: arial;
position: absolute;
border: 1px solid #111;
background-color: #EEE;
opacity: 0.85;
}
Код: Выделить всё
<script src="jquery-1.3.1.min.js"></script>
Код: Выделить всё
var currPos;
Код: Выделить всё
OpenLayersTooltips = {};
Код: Выделить всё
OpenLayersTooltips.getToolTip = function(feature){
var text = "<div class='openlayers-tooltip'>";
text += feature.attributes['attrname'];
text += "</div>";
return $(text);
}
Код: Выделить всё
OpenLayersTooltips.select = function(feature) {
var tooltip = OpenLayersTooltips.getToolTip(feature);
$(tooltip).css({zIndex:1000,left:currPos.x+10,top:currPos.y+10});
$(feature.layer.map.div).append(tooltip);
};
Код: Выделить всё
OpenLayersTooltips.unselect = function(feature) {
$(feature.layer.map.div).children('div.openlayers-tooltip').remove();
};
Код: Выделить всё
var map = new OpenLayers.Map({
...
eventListeners: {
"mouseover": function(evt) {currPos = evt.xy;}
}
Код: Выделить всё
select = new OpenLayers.Control.SelectFeature([layer],{onSelect:OpenLayersTooltips.select, onUnselect:OpenLayersTooltips.unselect});
map.addControl(select);
select.activate();