Empresas
Empleos
  • Sobre nosotros
  • Soluciones
    • Publicación de vacantes
      Publica tu vacante y recibe candidatos calificados en 48h.
    • Evaluación de candidatos
      500+ pruebas técnicas y psicológicas, más anti-fraude.
    • Headhunting
      Búsqueda ejecutiva a la medida de principio a fin.
    • Nómina + EOR
      Dispersión de nómina y EOR en más de 15 países de LATAM.
  • Precios
  • Empleos

0

111
Vistas
Layers in select interaction with swipe in openlayers

I use a swipe in Openlayers to show a layer on each side, which can be chosen from a menu. That is, it is not fixed whether a layer will be shown on the right or left side of the swipe. I have two select ol.interaction.Select: right and left side. My question is: how to dynamically change the layers for each select? In the code, layer1 is fixed to `selectPointerMove_left, but it may be that at some point, this layer will be added on side right.

var selectPointerMove_left = new ol.interaction.Select({
    condition: function(e) {
      return (
        ol.events.condition.pointerMove(e) &&
        e.pixel[0] < map.getSize()[0] * swipe_control.get('position')
      );
    },
    multi: false,
    layers: [layer1],
    style: selectedStyle
});

var selectPointerMove_right = new ol.interaction.Select({
    condition: function(e) {
      return (
        ol.events.condition.pointerMove(e) &&
        e.pixel[0] > map.getSize()[0] * swipe_control.get('position')
      );
    },
    multi: false,
    layers: [layer2],
    style: selectedStyle
}); 
about 4 years ago · Santiago Trujillo
1 Respuestas
Responde la pregunta

0

Define a swapped boolean, if you swap the layers set it true and test in the select conditions:

var swapped = false;

var selectPointerMove_left = new ol.interaction.Select({
  condition: function (e) {
    return (
      ol.events.condition.pointerMove(e) &&
      (swapped
        ? e.pixel[0] > map.getSize()[0] * swipe_control.get('position')
        : e.pixel[0] < map.getSize()[0] * swipe_control.get('position'))
    );
  },
  multi: false,
  layers: [layer1],
  style: selectedStyle
});

var selectPointerMove_right = new ol.interaction.Select({
  condition: function (e) {
    return (
      ol.events.condition.pointerMove(e) &&
      (swapped
        ? e.pixel[0] < map.getSize()[0] * swipe_control.get('position')
        : e.pixel[0] > map.getSize()[0] * swipe_control.get('position'))
    );
  },
  multi: false,
  layers: [layer2],
  style: selectedStyle
});

Or for more complex cases than a simple swap you could replace the layers array with a filter function and a maintain left/right flag for each layer (or even a three way left/right/both flag where both would be valid for both interactions):

var selectPointerMove_left = new ol.interaction.Select({
    condition: function(e) {
      return (
        ol.events.condition.pointerMove(e) &&
        e.pixel[0] < map.getSize()[0] * swipe_control.get('position')
      );
    },
    multi: false,
    filter: function(feature, layer) {
      return (
        {layer === layer1 && layer1Left) ||
        {layer === layer2 && layer2Left)
      );
    },
    style: selectedStyle
});

var selectPointerMove_right = new ol.interaction.Select({
    condition: function(e) {
      return (
        ol.events.condition.pointerMove(e) &&
        e.pixel[0] > map.getSize()[0] * swipe_control.get('position')
      );
    },
    multi: false,
    filter: function(feature, layer) {
      return (
        {layer === layer1 && !layer1Left) ||
        {layer === layer2 && !layer2Left)
      );
    },
    style: selectedStyle
}); 
about 4 years ago · Santiago Trujillo Denunciar
Responde la pregunta
Encuentra empleos remotos

¡Descubre la nueva forma de encontrar empleo!

Top de empleos
Top categorías de empleo
Empresas
Publicar vacante Precios Comercial
Legal
Términos y condiciones Política de privacidad
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Recomiéndame algunas ofertas
Necesito ayuda