2 votos

GetFeatureInfo al pasar el ratón sobre una característica en OpenLayers 3

Puedo obtener una ventana emergente al hacer clic en la característica, pero quiero obtener una ventana emergente también al pasar el ratón sobre la característica (polígono, punto). ¿Puede alguien ayudarme? Para onclick he utilizado el siguiente código -

var feature_onClick;
map.on('click', function(evt) {

    feature_onClick = map.forEachFeatureAtPixel(evt.pixel, function(feature, layer) {
        console.log(feature);
        return feature;
      });

  if (feature_onClick) {
    var content = document.getElementById('popup-content');
    console.log(feature_onClick.getProperties().name);
    overlay.setPosition(evt.coordinate);
     content.innerHTML = feature_onClick.getProperties().name;
     container.style.display = 'block';
     }
});

Para el mouse hover estoy usando el siguiente código pero no puedo obtener el pop up. Sólo el cursor cambia a puntero.

map.on('pointermove', function(e) {
  if (e.dragging) {
    $(element).popover('destroy');
    return;
  }
  var pixel = map.getEventPixel(e.originalEvent);
  var hit = map.hasFeatureAtPixel(pixel);
  map.getTarget().style.cursor = hit ? 'pointer' : '';
});

4voto

Bob Johnson Puntos 26

Podrías simplemente reutilizar tu código de clic y cambiarlo por pointermove/hover, aunque supongo que sólo quieres que la ventana emergente sea visible cuando esté sobre una característica, por lo que hay un else cláusula para ocultarlo.

var feature_onClick;
map.on('click', function(evt) {

    feature_onClick = map.forEachFeatureAtPixel(evt.pixel, function(feature, layer) {
        console.log(feature);
        return feature;
      });

  if (feature_onClick) {
    var content = document.getElementById('popup-content');
    console.log(feature_onClick.getProperties().name);
    overlay.setPosition(evt.coordinate);
     content.innerHTML = 'CLICK ' + feature_onClick.getProperties().name;
     container.style.display = 'block';
     }
});

    var feature_onHover;
    map.on('pointermove', function(evt) {

        feature_onHover = map.forEachFeatureAtPixel(evt.pixel, function(feature, layer) {
            console.log(feature);
            return feature;
          });

      if (feature_onHover) {
        var content = document.getElementById('popup-content');
        console.log(feature_onHover.getProperties().name);
        overlay.setPosition(evt.coordinate);
         content.innerHTML = 'HOVER ' + feature_onHover.getProperties().name;
         container.style.display = 'block';
      } else {
         container.style.display = 'none';
      }
    });

0 votos

Pero hay un problema, quiero que ambas cosas funcionen a la vez, es decir, que aparezcan al pasar el ratón y también al hacer clic. Pero, sólo una cosa (hover) está trabajando con el siguiente código. He perdido la ventana emergente al hacer clic.

0 votos

Creo que necesitarías dos elementos de contenido emergente separados, uno para el clic y otro para el hover.

0 votos

He intentado crear dos ventanas emergentes pero no ha funcionado, supongo que estoy cometiendo un error en alguna parte. Estaré muy agradecido si usted va a través de mi código.

i-Ciencias.com

I-Ciencias es una comunidad de estudiantes y amantes de la ciencia en la que puedes resolver tus problemas y dudas.
Puedes consultar las preguntas de otros usuarios, hacer tus propias preguntas o resolver las de los demás.

Powered by:

X