Search code examples
javascriptjsonslidercarouselglidejs

Glide.js dynamic append content from Json


I'm trying to add content to the slider dynamically from JSON.

import Glide from '@glidejs/glide';

function slider() {
  let ul = document.querySelector('.glide__slides');
  let card = '';
  var glide = new Glide('.glide').destroy();

  const photo = import('../metadata/photos.json').then((module) => {
    const data = module.default;
    data.forEach((photo) => {
      console.log(photo);
      card += `<li class="glide__slide"><img src="${photo.thumbnailUrl}" alt="${photo.title}">${photo.id}</li>`;
    });
    ul.innerHTML = card;
  });

  glide.mount();
}

slider();

The content seems to load but the slider is not working


Solution

  • That happens because glide.mount(); runs before the import and generate HTML finished.

    So, you have to import the data and append it then call glide.mount();.

    import Glide from '@glidejs/glide';
    
    function slider() {
      let ul = document.querySelector('.glide__slides');
      let card = '';
      var glide = new Glide('.glide').destroy();
    
      const photo = import('../metadata/photos.json').then((module) => {
        const data = module.default;
        data.forEach((photo) => {
          console.log(photo);
          card += `<li class="glide__slide"><img src="${photo.thumbnailUrl}" alt="${photo.title}">${photo.id}</li>`;
        });
        ul.innerHTML = card;
      }).then(() => glide.mount());
    }
    
    slider();