Javascript Firefox速度非常慢,forEachFeatureatPixel
当使用forEachFeatureatPixel函数时,Firefox和IE在OPENLAYERS 3上的运行速度非常慢。我在想办法加快速度。本质上,该应用程序(可在www.penguinmap.com上找到)有一个弹出窗口,当用户将鼠标悬停在地图上的某个点上时弹出。但是Firefox很难做到这一点。我正在寻找以下代码的帮助,以加快速度:Javascript Firefox速度非常慢,forEachFeatureatPixel,javascript,firefox,openlayers-3,Javascript,Firefox,Openlayers 3,当使用forEachFeatureatPixel函数时,Firefox和IE在OPENLAYERS 3上的运行速度非常慢。我在想办法加快速度。本质上,该应用程序(可在www.penguinmap.com上找到)有一个弹出窗口,当用户将鼠标悬停在地图上的某个点上时弹出。但是Firefox很难做到这一点。我正在寻找以下代码的帮助,以加快速度: var selectMouseMove = new ol.interaction.Select({ condition: function (e)
var selectMouseMove = new ol.interaction.Select({
condition: function (e) {
return e.originalEvent.type == 'mousemove';
},
style: hoverStyle
})
// Change cursor
var target = map.getTarget();
var jTarget = typeof target === "string" ? $("#" + target) : $(target);
// On Hover, change the mouse cursor and display the name of the site
$(map.getViewport()).on('mousemove', function (e) {
var pixel = map.getEventPixel(e.originalEvent);
var feature = map.forEachFeatureAtPixel(pixel,
function (feature, layer) {
return feature;
});
if (feature) {
map.addInteraction(selectMouseMove)
jTarget.css("cursor", "pointer");
var geometry = feature.getGeometry();
var coord = geometry.getCoordinates();
popup.setPosition(coord);
$(element).popover({
'placement': 'top',
'html': true,
'content': feature.get('site_name')
});
$(element).popover('show');
} else {
map.removeInteraction(selectMouseMove)
jTarget.css("cursor", "");
$(element).popover('destroy');
}
});
var element = document.getElementById('popup');
var popup = new ol.Overlay({
element: element,
positioning: 'bottom-center',
stopEvent: false
});
map.addOverlay(popup);
我用自己的函数解决了这个问题(在IE11上也有性能慢的问题)
// Alternative FeatureAtPixel-Function wegen FF
// Sucht im Rechteck vom Punkt pixel aus in +/- x und +/- y
function FFIE_getFeatureAtPixelQuadrat(pixel, DiffCoord) {
result = [];
mousepixel = map.getCoordinateFromPixel(pixel);
f = vectorSource.getFeatures();
c = 0;
for (var i in f) {
if (f[i].point.flatCoordinates[0] > mousepixel[0] - DiffCoord && f[i].point.flatCoordinates[0] < mousepixel[0] + DiffCoord ) {
if (f[i].point.flatCoordinates[1] > mousepixel[1] - DiffCoord && f[i].point.flatCoordinates[1] < mousepixel[1] + DiffCoord ) {
c++;
result.push(f[i]);
}}
}
if (c > 0) {
return result;
}
}
现在IE和FF似乎比Chrome在mousemove上的弹出速度要快。
此示例仅适用于点,因为它在点原点周围的正方形中搜索特征。
我希望这能有所帮助?我用自己的函数解决了这个问题,但只得到了分数(我在IE 11上也遇到了性能慢的问题)
// Alternative FeatureAtPixel-Function wegen FF
// Sucht im Rechteck vom Punkt pixel aus in +/- x und +/- y
function FFIE_getFeatureAtPixelQuadrat(pixel, DiffCoord) {
result = [];
mousepixel = map.getCoordinateFromPixel(pixel);
f = vectorSource.getFeatures();
c = 0;
for (var i in f) {
if (f[i].point.flatCoordinates[0] > mousepixel[0] - DiffCoord && f[i].point.flatCoordinates[0] < mousepixel[0] + DiffCoord ) {
if (f[i].point.flatCoordinates[1] > mousepixel[1] - DiffCoord && f[i].point.flatCoordinates[1] < mousepixel[1] + DiffCoord ) {
c++;
result.push(f[i]);
}}
}
if (c > 0) {
return result;
}
}
现在IE和FF似乎比Chrome在mousemove上的弹出速度要快。
此示例仅适用于点,因为它在点原点周围的正方形中搜索特征。
我希望这有帮助