我正在尝试使用从官方OL3示例页面中获取的以下方法创建鼠标悬停事件:
http://openlayers.org/en/latest/examples/earthquake-clusters.html
我只有在悬停在特定图层上时才需要触发动作。在查阅了官方文档后,我发现你可以使用带有hasFeatureAtPixel的图层过滤功能,但它看起来并没有起作用。
map.on('pointermove', function(evt) {
if (evt.dragging) {
return;
}
var pixel = map.getEventPixel(evt.originalEvent);
var hit = map.hasFeatureAtPixel(pixel, function(feature, layer) {
console.log(layer);
console.log(feature);
});
});
console.log调用导致在控制台中给出要素对象,但没有图层对象,这些对象将作为“未定义”返回。我需要测试图层对象是否是正确的图层。
为什么这不起作用的任何想法?
答案 0 :(得分:3)
实际上API被重写(v4.0.1),工作示例如下:
var hit = map.hasFeatureAtPixel(e.pixel, {
layerFilter: function (layer) {
return layer.get('name') === 'test';
}
});
答案 1 :(得分:1)
过滤函数将接收一个参数,即候选层和 它应该返回一个布尔值。
我们假设您有一个类似的图层:
var vectorLayer = new ol.layer.Vector({
name: 'test',
// ...
});
您可以添加图层过滤功能,如:
map.on('pointermove', function(e) {
if (e.dragging) return;
var hit = map.hasFeatureAtPixel(e.pixel, function(layer) {
return layer.get('name') === 'test'; // boolean
});
map.getTarget().style.cursor = hit ? 'pointer' : '';
});