JSFiddle - React, Tailwind, and code Playground
by Chris Ball
HTML
<span id='slideselector'></span>
<div id="slideshow">
<div>
<div class="imgLike" style="background-image: url('http://farm6.static.flickr.com/5224/5658667829_2bb7d42a9c_m.jpg'); background-position:center; "></div>
</div>
<div>
<div class="imgLike" style="background-image: url('http://farm6.static.flickr.com/5230/5638093881_a791e4f819_m.jpg'); background-position:center; "></div>
</div>
<div>
<div class="imgLike" style="background-image: url('http://gillespaquette.ca/images/stack-icon.png'); background-position:center; "></div>
</div>
</div>
CSS
#slideselector {
position: absolue;
top:0;
left:0;
border: 2px solid black;
padding-top: 1px;
}
.slidebutton {
height: 21px;
margin: 2px;
}
#slideshow {
margin: 50px auto;
position: relative;
width: 240px;
height: 240px;
padding: 10px;
box-shadow: 0 0 20px rgba(0,0,0,0.4);
}
#slideshow > div {
position: absolute;
top: 10px;
left: 10px;
right: 10px;
bottom: 10px;
overflow:hidden;
}
.imgLike {
width:100%;
height:100%;
}
/* Radio */
input[type="radio"] {
background-color: #ddd;
background-image: -webkit-linear-gradient(0deg, transparent 20%, hsla(0,0%,100%,.7), transparent 80%),
-webkit-linear-gradient(90deg, transparent 20%, hsla(0,0%,100%,.7), transparent 80%);
border-radius: 10px;
box-shadow: inset 0 1px 1px hsla(0,0%,100%,.8),
0 0 0 1px hsla(0,0%,0%,.6),
0 2px 3px hsla(0,0%,0%,.6),
0 4px 3px hsla(0,0%,0%,.4),
0 6px 6px hsla(0,0%,0%,.2),
0 10px 6px hsla(0,0%,0%,.2);
cursor: pointer;
display: inline-block;
height: 15px;
margin-right: 15px;
position: relative;
width: 15px;
-webkit-appearance: none;
}
input[type="radio"]:after {
background-color: #444;
border-radius: 25px;
box-shadow: inset 0 0 0 1px hsla(0,0%,0%,.4),
0 1px 1px hsla(0,0%,100%,.8);
content: '';
display: block;
height: 7px;
left: 4px;
position: relative;
top: 4px;
width: 7px;
}
input[type="radio"]:checked:after {
background-color: #f66;
box-shadow: inset 0 0 0 1px hsla(0,0%,0%,.4),
inset 0 2px 2px hsla(0,0%,100%,.4),
0 1px 1px hsla(0,0%,100%,.8),
0 0 2px 2px hsla(0,70%,70%,.4);
}
JavaScript
$("#slideshow > div:gt(0)").hide();
function rotate(speed) {
$('#slideshow > div:first')
.fadeOut(speed)
.next()
.fadeIn(speed)
.end()
.appendTo('#slideshow');
$('input[name="foo"]')[$('#slideshow > div:first div.imgLike').attr('img-index')].checked=true;
};
function select(idx) {
clearInterval(interval);
$('#slideshow > div:first').fadeOut(1000)
while ($('#slideshow > div:first .imgLike').attr('img-index') != idx) {
rotate(0);
}
$('#slideshow > div:first').fadeIn(1000);
interval = setInterval(function(){rotate(1000);}, 3000);
}
$('.imgLike').each(function(i,el) {
$(el).attr('img-index',i);
$("<input>").attr({'id':'img-'+i, 'type':'radio', 'value':i, 'name':'foo'}).click(function() {select(i);}).appendTo($('#slideselector'))
});
var interval = setInterval(function(){rotate(1000);}, 3000);