我設法通過在Text元素後面使用SVG形狀來解決類似問題,並用顏色填充形狀以獲得相同的結果。
我不得不調整背景形狀的大小來匹配文本元素的大小,它不像我希望的那樣直截了當。
主要塊是:
- SVG項目沒有背景風格,以及
text
元素fill
屬性只會改變文字顏色不是它的背景色。這就是爲什麼我必須首先使用另一種形狀。
- 當SVG元素用作圖像元素的源時,出於安全原因,其內部的所有JavaScript代碼都會被忽略。因此,您無法動態檢查/更改尺寸。
- SVG元素中的形狀和路徑不是DOM的一部分,因此您無法使用JavaScript或CSS訪問或設置它們的樣式。
我所做的第一件事是使用下面的代碼 - 我發現#2某處,得到呈現的文本,以像素寬度:
/* Get the rendered size of a text, in pixels */
/* _text: "Blah blah" */
/* _fontStyle: "Normal 12px Arial" */
function getTextWidth (_text, _fontStyle) {
var canvas = undefined,
context = undefined,
metrics = undefined;
canvas = document.createElement("canvas")
context = canvas.getContext("2d");
context.font = _fontStyle;
metrics = context.measureText(_text);
return metrics.width;
}
然後我用它在我的其他函數這是生成標記,其標籤:
...
labelFontStyle = "Normal 12px Arial";
labelWidth = getTextWidth(_text, labelFontStyle);
labelWidth = labelWidth + 10;
iconSVG = '<svg ' +
'version="1.1" id="Layer_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" ' +
'x="0px" y="0px" width="' + labelWidth + 'px" height="16px" ' +
'viewBox="0 0 ' + labelWidth + ' 16" enable-background="new 0 0 ' + labelWidth + ' 16" xml:space="preserve">'+
'<rect x="0" y="0" width="' + labelWidth + '" height="16" stroke="#000000" fill="#DEEFAE" stroke-width="2"></rect>' +
'<text x="5" y="13" fill="#000000" font-family="Arial" font-size="12" font-weight="normal">' + _text + '</text>' +
'</svg>';
imageElement = new Image();
imageElement.src = 'data:image/svg+xml,' + escape(iconSVG);
iconStyle = new ol.style.Style({
"image": new ol.style.Icon({
"img": imageElement,
"imgSize":[labelWidth, 66],
"anchor": [0.5, 0.5],
"offset": [0, -50]
})
});
feature = new ol.Feature({
"geometry": new ol.geom.Point(
ol.proj.fromLonLat([_longitude, _latitude])
)
});
feature.setStyle(iconStyle);
return feature;
這就是我的回答是我最初發布here
您能否更具體地瞭解這個問題?你能分享一個截圖嗎?創建jsfiddle的最小化版本?看着這個例子,增加標籤的輪廓寬度似乎對我來說很好。 –
嘿。對不起,我正在回答這個問題。我當時正在度假。我更新了這個問題,並試圖更具體。我希望這可以幫助你,因爲可悲的是我目前無法提供任何有用的屏幕。謝謝,再見 – Bastian
沒問題,這確實更清楚。查看文本標籤的代碼,目前不支持將矩形作爲背景。如果任何一個開發人員想要權衡,那麼聽到這可能是可能的事情會很有趣。 –