JSFiddle - React, Tailwind, and code Playground

by bumbu

HTML

<div class="slider">
  <div class="slider-inner">
    <div class="element">
      <div class="image">
        <img class="default" src="http://bumbu.ru/wp-content/uploads/2013/12/scroller_image_default.png" width="99" height="102" alt="">
        <img class="active" src="http://bumbu.ru/wp-content/uploads/2013/12/scroller_image_active.png" width="99" height="102" alt="">
      </div>
      <div class="title"><a href="#">Eco technology for life</a></div>
    </div>
    <div class="element">
      <div class="image">
        <img class="default" src="http://bumbu.ru/wp-content/uploads/2013/12/scroller_image_default.png" width="99" height="102" alt="">
        <img class="active" src="http://bumbu.ru/wp-content/uploads/2013/12/scroller_image_active.png" width="99" height="102" alt="">
      </div>
      <div class="title"><a href="#">Eco Power of technology for life</a></div>
    </div>
    <div class="element">
      <div class="image">
        <img class="default" src="http://bumbu.ru/wp-content/uploads/2013/12/scroller_image_default.png" width="99" height="102" alt="">
        <img class="active" src="http://bumbu.ru/wp-content/uploads/2013/12/scroller_image_active.png" width="99" height="102" alt="">
      </div>
      <div class="title"><a href="#">Power of new technology for life</a></div>
    </div>
    <div class="element">
      <div class="image">
        <img class="default" src="http://bumbu.ru/wp-content/uploads/2013/12/scroller_image_default.png" width="99" height="102" alt="">
        <img class="active" src="http://bumbu.ru/wp-content/uploads/2013/12/scroller_image_active.png" width="99" height="102" alt="">
      </div>
      <div class="title"><a href="#">New technology for life</a></div>
    </div>
    <div class="element">
      <div class="image">
        <img class="default" src="http://bumbu.ru/wp-content/uploads/2013/12/scroller_image_default.png" width="99" height="102" alt="">
        <img class="active"...

CSS

.slider{
  position: relative;
  overflow: hidden;
  height: 230px;
  background-image: linear-gradient(to bottom, #d1dfea, #adc6da);
}

.slider-inner{
  height: 230px;
  position: absolute;
  top: 0;
  left: 0;
}

/* Element properties */

.element{
  width: 200px;
  height: 230px;
  float: left;
  text-align: center;
}

.element .image{
  height: 102px;
}

.element .image .active{
  display: none;
}

.element .title{
  padding: 3px 20px 0;
  font-size: 14px;
  opacity: 0.5;
  transition: 0.2s linear opacity;
  text-transform: uppercase;
}

.element .title a{
  color: #336791;
}

/* Active element properties */

.element.active .image .default{
  display: none;
}

.element.active .image .active{
  display: inline-block;
}

.element.active .title{
  opacity: 1;
}

/* Slider controls */


.slider-control{
  position: absolute;
  top: 60px;
  display: block;
  width: 0;
  height: 0;
  margin: 0 101px;
  border-color: transparent;
  border-style: solid;
  opacity: 0.7;
}

.slider-control:hover{
  opacity: 1;
}

.slider-control.left{
  right: 50%;
  border-width: 16px 19px 16px 0;
  border-right-color: #336791;
}

.slider-control.right{
  left: 50%;
  border-width: 16px 0 16px 19px;
  border-left-color: #336791;
}

JavaScript

$(function(){
  $.extend($.easing, {
      def: 'easeInSine',
      easeInSine: function (x, t, b, c, d) {
          return -c * Math.cos(t/d * (Math.PI/2)) + c + b;
      },
      easeInOutBack: function (x, t, b, c, d, s) {
          if (s == undefined) s = 1.70158;
          if ((t/=d/2) < 1) return c/2*(t*t*(((s*=(1.525))+1)*t - s)) + b;
          return c/2*((t-=2)*t*(((s*=(1.525))+1)*t + s) + 2) + b;
      }
  });

  var $slider = $('.slider')
    , slider_width = 0
    , $slider_inner = $slider.children().first()
    , $elements = $slider_inner.children('.element')
    , elements_count = $elements.length
    , element_width = $elements.first().width()
    , element_margin = 0
    , elements_fit = 0
    , visible_width = 0


  function onResize() {
    slider_width = $slider.width()
    elements_fit = Math.floor(slider_width/element_width)
    // we have a limited number of elements
    if (elements_fit > elements_count) {
      elements_fit = elements_count
    }
    // we need only odd number
    if (elements_fit % 2 === 0) {
      elements_fit -= 1
    }

    // find element margin for balancing
    element_margin = Math.ceil((slider_width - (element_width * elements_fit))/(elements_fit * 2))

    // set container width * 1.5 to fit clonned elements when scroll
    visible_width = (element_width + element_margin * 2) * elements_fit
    $slider_inner.width(Math.ceil(visible_width * 1.5))
    // add margins
    $elements.css({'margin-left': element_margin + 'px', 'margin-right': element_margin + 'px'})

    // set active element
    $elements.removeClass('active')
    $elements.slice(Math.floor(elements_fit/2), Math.floor(elements_fit/2) + 1).addClass('active')
  }

  function goTo(index_to) {
    var index_past = Math.floor(elements_fit/2)
    // if active element
    if (index_to === index_past) {
      return
    }

    var index_diff = index_to - index_past
      , $elements_slice
      , left_to = 0

    if (index_diff > 0) {
      $elements_slice =...