Select to view content in your preferred language

Combining legend and visibility slider in to the layer list

639
2
Jump to solution
12-08-2022 09:25 AM
rajriyas9
New Contributor

I am looking for the combination of Legend and Visibility Slider both in to the Layer List.

Code:

const layerList = new LayerList({
  view: view,
  listItemCreatedFunction: function (event) {
    const item = event.item;
    item.panel = {
      content: "legend",
      open: true
    };

 const slider = new Slider({
      min: 0,
      max: 1,
      precision: 2,
      values: [ 1 ],
      visibleElements: {
        labels: true,
        rangeLabels: true
      }
    });

    item.panel = {
      content: slider,
      className: "esri-icon-sliders-horizontal",
      title: "Change layer opacity"
    };
  }
});

Is it possible? if yes, Please share the code.

0 Kudos
1 Solution

Accepted Solutions
UndralBatsukh
Esri Regular Contributor

This simple codepen show how this can be done: https://codepen.io/U_B_U/pen/VwdJbBe?editors=100 and the below is the main code: 

 const itemPanelDiv = document.createElement("div");

 const sliderDiv = document.createElement("div");
 sliderDiv.classList.add("esri-widget");
 const slider = new Slider({
   min: 0,
   max: 1,
   precision: 2,
   values: [1],
   visibleElements: {
     labels: true,
     rangeLabels: true
   },
   container: sliderDiv
 });

slider.on("thumb-drag", (event) => {
  const { value } = event;
  item.layer.opacity = value;
});

const legendDiv = document.createElement("div");
legendDiv.classList.add("esri-widget");
const legend = new Legend({
  view: view,
  layerInfos: [
    {
      layer: item.layer
    }
   ],
   container: legendDiv
});
itemPanelDiv.append(sliderDiv, legendDiv);

item.panel = {
  content: itemPanelDiv,
  className: "esri-icon-collection",
  open: true, //item.visible,
  title: "title"
};

View solution in original post

2 Replies
UndralBatsukh
Esri Regular Contributor

This simple codepen show how this can be done: https://codepen.io/U_B_U/pen/VwdJbBe?editors=100 and the below is the main code: 

 const itemPanelDiv = document.createElement("div");

 const sliderDiv = document.createElement("div");
 sliderDiv.classList.add("esri-widget");
 const slider = new Slider({
   min: 0,
   max: 1,
   precision: 2,
   values: [1],
   visibleElements: {
     labels: true,
     rangeLabels: true
   },
   container: sliderDiv
 });

slider.on("thumb-drag", (event) => {
  const { value } = event;
  item.layer.opacity = value;
});

const legendDiv = document.createElement("div");
legendDiv.classList.add("esri-widget");
const legend = new Legend({
  view: view,
  layerInfos: [
    {
      layer: item.layer
    }
   ],
   container: legendDiv
});
itemPanelDiv.append(sliderDiv, legendDiv);

item.panel = {
  content: itemPanelDiv,
  className: "esri-icon-collection",
  open: true, //item.visible,
  title: "title"
};
Jeff-Reinhart
New Contributor III

Thanks, @UndralBatsukh! That covered all the little pieces I was missing.

0 Kudos