JSFiddle - React, Tailwind, and code Playground

by oilvier

HTML

<script src="https://rawgit.com/stevenwanderski/bxslider-4/master/dist/jquery.bxslider.min.js"></script>
<script src="https://rawgit.com/WickyNilliams/enquire.js/master/dist/enquire.min.js"></script>
<script src="https://rawgit.com/aFarkas/lazysizes/gh-pages/lazysizes.min.js"></script>
<script src="https://rawgit.com/scottjehl/picturefill/master/dist/picturefill.min.js"></script>
<div class="diaporama">
  <div>
    <div class="bx-button diaporama__button diaporama__button--prev" title="Prev"></div>
    <ul class="js-diaporama-thumbs diaporama__pager">
      <li class="diaporama__item">
        <a href="#" class="diaporama__link">
          <img data-sizes="(min-width:1101px) 228px,
										(min-width:720px) 150px,
										(min-width:501px) 130px,
										100px" data-srcset="//placehold.it/100x50/000000/FFFFFF 100w,
										//placehold.it/130x65/000000/FFFFFF 130w,
										//placehold.it/150x75/000000/FFFFFF 150w,
										//placehold.it/228x114/000000/FFFFFF 228w" alt="" class="lazyload">
        </a>
      </li>
      <li class="diaporama__item">
        <a href="#" class="diaporama__link">
          <img data-sizes="(min-width:1101px) 228px,
										(min-width:720px) 150px,
										(min-width:501px) 130px,
										100px" data-srcset="//placehold.it/100x50/210aad/FFFFFF 100w,
										//placehold.it/130x65/210aad/FFFFFF 130w,
										//placehold.it/150x75/210aad/FFFFFF 150w,
										//placehold.it/228x114/210aad/FFFFFF 228w" alt="" class="lazyload">
        </a>
      </li>
      <li class="diaporama__item">
        <a href="#" class="diaporama__link">
          <img data-sizes="(min-width:1101px) 228px,
										(min-width:720px) 150px,
										(min-width:501px) 130px,
										100px" data-srcset="//placehold.it/100x50/038b19/FFFFFF 100w,
										//placehold.it/130x65/038b19/FFFFFF 130w,
										//placehold.it/150x75/038b19/FFFFFF 150w,
										//placehold.it/228x114/038b19/FFFFFF 228w" alt="" class="lazyload">
        </a>
     ...

CSS

*,
*:before,
*:after {
  box-sizing: border-box;
}

* {
  margin: 0;
  padding: 0;
}

.bx-viewport li {
  min-height: 1px;
  min-width: 1px;
}

.bx-button button {
  padding: 0;
  background: none;
}

img {
  max-width: 100%;
  height: auto;
}

html,
body {
  height: 100%;
}

.diaporama {
  position: absolute;
  left: 0;
  z-index: 1;
  padding: 20px;
  background: rgba(0, 0, 0, 0.75);
}

@media screen and (min-width:601px) {
  .diaporama {
    top: 0;
    display: flex;
    justify-content: center;
    flex-direction: column;
    width: 190px;
    height: 100%;
  }
  /* État actif */
  .diaporama__pager-link.active:before,
  .diaporama__pager-link.is-active:before {
    border-width: 8px;
  }
}

.diaporama__pager {
  list-style: none;
}

.diaporama__item {
  position: relative;
}

.diaporama__item:after {
  content: "";
  display: block;
  width: 100%;
  height: 0;
  padding-bottom: 50%;
}

.diaporama__item:not(:last-child) {
  margin-bottom: 10px;
}

.diaporama__link {
  position: absolute;
  top: 0;
  left: 0;
  width: 100%;
  height: 100%;
  display: block;
  border: none;
}

.diaporama__link:before {
  content: "";
  position: absolute;
  top: 0;
  left: 0;
  right: 0;
  bottom: 0;
  border: 0 solid white;
  transition: border 0.3s ease-out;
}

.diaporama__link > img {
  border: 1px solid white;
}

@media screen and (max-width:600px) {
  .diaporama {
    bottom: 0;
    padding: 0;
    width: 100%;
    text-align: center;
  }
  .diaporama > div {
    position: relative;
    display: inline-block;
    padding: 10px;
  }
  .diaporama.is-launched > div {
    padding-left: 70px;
    padding-right: 70px;
  }
  .diaporama {
    height: 100px;
    overflow: hidden;
    z-index: 0;
  }
  .diaporama > div {
    position: absolute;
    top: 0;
    right: 0;
    bottom: 0;
    left: 0;
  }
  .diaporama.is-launched,
  .loaded .diaporama {
    height: auto;
    overflow: visible;
  }
  .diaporama.is-launched > div,
  .loaded .diaporama > div {
    position: relative;
  }
...

JavaScript

var pause = 9000,
  speed = 800,
  diaporamaCarousel = $(".js-diaporama-thumbs"),
  $diaporamaCarouselItem = diaporamaCarousel.find(".diaporama__item:not(.bx-clone)"),
  diaporamaCarouselPrev = $('.diaporama__button--prev'),
  diaporamaCarouselNext = $('.diaporama__button--next'),
  diaporamaCarouselOptions = {
    desktop: {
      speed: speed,
      auto: false,
      stopAuto: true,
      pause: pause,
      mode: 'vertical',
      controls: true,
      prevSelector: diaporamaCarouselPrev,
      nextSelector: diaporamaCarouselNext,
      prevText: "<",
      nextText: ">",
      pager: false,
      slideMargin: 10,
      minSlides: 3,
      maxSlides: 3,
      moveSlides: 1,
      onSliderLoad: function() {
        $('.diaporama').addClass("is-launched");
      }
    },
    mob: {
      speed: speed,
      auto: false,
      stopAuto: true,
      pause: pause,
      mode: 'horizontal',
      controls: true,
      prevSelector: diaporamaCarouselPrev,
      nextSelector: diaporamaCarouselNext,
      prevText: "<",
      nextText: ">",
      pager: false,
      slideWidth: 150,
      slideMargin: 10,
      minSlides: 2,
      maxSlides: 2,
      moveSlides: 1,
      onSliderLoad: function() {
        $('.diaporama').addClass("is-launched");
      }
    }
  };

enquire.register("only screen and (min-width:601px)", {
  match: function() {
  console.log('desktop')
    if ($diaporamaCarouselItem.length > 3) {
    if(diaporamaCarousel.reloadSlider){
     	diaporamaCarousel.reloadSlider(diaporamaCarouselOptions.desktop);
    } else {
    diaporamaCarousel.bxSlider(diaporamaCarouselOptions.desktop);
    }
     
    } else {
      diaporamaCarousel.destroySlider();
      $('.diaporama').removeClass("is-launched");
    }
  }
}).register("only screen and (max-width:600px)", {
  match: function() {
    console.log('mob')
  if ($diaporamaCarouselItem.length > 3) {
  if(diaporamaCarousel.reloadSlider){
     	diaporamaCarousel.reloadSlider(diaporamaCarouselOptions.mob);
    }...