JSFiddle - React, Tailwind, and code Playground
HTML
<link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/slick-carousel@1.8.1/slick/slick.css">
<script src="https://cdn.jsdelivr.net/npm/slick-carousel@1.8.1/slick/slick.min.js"></script>
<div class="slider">
<div class="slide">1</div>
<div class="slide">2</div>
<div class="slide">3</div>
<div class="slide">4</div>
<div class="slide">5</div>
<div class="slide">6</div>
<div class="slide">7</div>
<div class="slide">8</div>
<div class="slide">9</div>
</div>
CSS
body {
background: #FFF;
padding: 20px;
font-family: Helvetica;
}
.slider {
color: #333;
padding:0 0 30px;
}
.slide {
font-size: 90px;
width: 150px;
padding:10px 0;
margin:20px 15px;
text-align: center;
border: 1px solid #999;
}
.slide.locked { background: rgba(255,255,0,0.5); }
.slick-prev, .slick-next {
position: absolute;
bottom:0;
}
.slick-next { left:80px; }
JavaScript
let currentFocus, nextFocus, prevFocus;
$(document).ready(function(){
$('.slider').slick({
dots: false,
infinite: false,
speed: 300,
slidesToShow: 5,
slidesToScroll: 1,
responsive: [
{
breakpoint: 1024,
settings: {
slidesToShow: 3,
}
},
{
breakpoint: 600,
settings: {
slidesToShow: 2,
}
},
{
breakpoint: 480,
settings: {
slidesToShow: 1,
}
}
]
});
function setForFocus() {
nextFocus = currentFocus.next();
prevFocus = currentFocus.prev();
if (prevFocus.length == 0)
prevFocus = null;
if (nextFocus.length == 0)
nextFocus = null;
}
$('.slide').on('click', function() {
if ($(this).hasClass('locked')) {
$(this).toggleClass('locked');
currentFocus = nextFocus = prevFocus = null;
} else {
if (typeof currentFocus !== "undefined" &&
currentFocus !== null)
currentFocus.toggleClass('locked');
$(this).toggleClass('locked');
currentFocus = $(this);
setForFocus();
}
});
$('.slick-next').on('click', function() {
if (typeof currentFocus !== "undefined" &&
currentFocus !== null &&
typeof nextFocus !== "undefined" &&
nextFocus !== null) {
let next_text = Number(nextFocus.text());
let cur_text = Number(currentFocus.text());
currentFocus.text(next_text);
nextFocus.text(cur_text);
currentFocus.toggleClass('locked');
nextFocus.toggleClass('locked');
currentFocus = nextFocus;
setForFocus();
}
});
$('.slick-prev').on('click', function() {
if (typeof currentFocus !== "undefined" &&
currentFocus !== null &&
typeof prevFocus !== "undefined" &&
prevFocus !== null) {
let prev_text = Number(prevFocus.text());
let cur_text = Number(currentFocus.text());
...