Nice Slice Slider With jQuery And CSS3 Transitions
| File Size: | 3.36 KB |
|---|---|
| Views Total: | 3439 |
| Last Update: | |
| Publish Date: | |
| Official Website: | Go to website |
| License: | MIT |
A pretty cool jQuery/HTML5/CSS slider that allows your users to switch between a group of web contents with a slice transition effect powered by CSS3 transitions. Supports arrow keys interaction.
How to use it:
1. Create a group of slides and insert them together with the navigation buttons into the slider.
<section class="slides">
<section class="slides-nav">
<nav class="slides-nav__nav">
<button class="slides-nav__prev js-prev">Prev</button>
<button class="slides-nav__next js-next">Next</button>
</nav>
</section>
<section class="slide is-active">
<div class="slide__content">
<figure class="slide__figure">
<div class="slide__img" style="background-image: url(1.jpg)"></div>
</figure>
<header class="slide__header">
<h2 class="slide__title">
<span class="title-line"><span>Header 1</span></span>
<span class="title-line"><span>Tag line 1</span></span>
</h2>
</header>
</div>
</section>
<section class="slide">
<div class="slide__content">
<figure class="slide__figure">
<div class="slide__img" style="background-image: url(2.jpg)"></div>
</figure>
<header class="slide__header">
<h2 class="slide__title">
<span class="title-line"><span>Header 1</span></span>
<span class="title-line"><span>Tag line 2</span></span>
</h2>
</header>
</div>
</section>
<section class="slide">
<div class="slide__content">
<figure class="slide__figure">
<div class="slide__img" style="background-image: url(3.jpg)"></div>
</figure>
<header class="slide__header">
<h2 class="slide__title">
<span class="title-line"><span>Header 3</span></span>
<span class="title-line"><span>Tag line 3</span></span>
</h2>
</header>
</div>
</section>
</section>
2. Style & position the slider navigation buttons.
.slides-nav {
z-index: 99;
position: fixed;
right: -5%;
display: -webkit-box;
display: -ms-flexbox;
display: flex;
-webkit-box-align: center;
-ms-flex-align: center;
align-items: center;
height: 100%;
color: #111;
}
@media (min-width: 54em) {
.slides-nav { right: 2%; }
}
.slides-nav__nav {
position: relative;
right: 0;
display: block;
font-size: 1em;
-webkit-transform: rotate(90deg);
transform: rotate(90deg);
-webkit-transform-origin: center;
transform-origin: center;
}
.slides-nav button {
position: relative;
display: inline-block;
padding: 0.35em;
margin: 0;
font-family: "Space Mono", monospace;
-webkit-appearance: none;
-moz-appearance: none;
appearance: none;
background: transparent;
border: 0;
overflow-x: hidden;
-webkit-transition: color 0.5s ease;
transition: color 0.5s ease;
}
.slides-nav button:after {
content: '';
position: absolute;
top: 50%;
left: 0;
height: 1px;
width: 0;
background: #111;
-webkit-transition: width 0.4s ease;
transition: width 0.4s ease;
}
.slides-nav button:hover {
cursor: pointer;
color: rgba(17, 17, 17, 0.75);
-webkit-transition: color 0.5s ease;
transition: color 0.5s ease;
}
.slides-nav button:hover:after {
width: 100%;
-webkit-transition: width 0.4s ease;
transition: width 0.4s ease;
}
.slides-nav button:focus { outline: 0; }
3. The primary CSS/CSS3 styles for the slides.
.is-sliding .slides-nav { pointer-events: none; }
.slides {
position: relative;
display: block;
height: 100vh;
width: 100%;
background: #fff;
-webkit-transition: background 1s cubic-bezier(0.99, 1, 0.92, 1);
transition: background 1s cubic-bezier(0.99, 1, 0.92, 1);
}
.is-sliding .slides {
background: #ededed;
-webkit-transition: background 0.3s cubic-bezier(0.99, 1, 0.92, 1);
transition: background 0.3s cubic-bezier(0.99, 1, 0.92, 1);
}
.slide {
z-index: -1;
padding: 0;
position: absolute;
width: 100%;
height: 100vh;
-webkit-transition: z-index 1s ease;
transition: z-index 1s ease;
}
.slide.is-active {
z-index: 19;
-webkit-transition: z-index 1s ease;
transition: z-index 1s ease;
}
.slide__content {
position: relative;
margin: 0 auto;
height: 95%;
width: 95%;
top: 2.5%;
}
@media (min-width: 54em) {
.slide__content {
height: 80%;
width: 80%;
top: 10%;
}
}
.slide__header {
z-index: 9;
position: relative;
height: 100%;
display: -webkit-box;
display: -ms-flexbox;
display: flex;
-webkit-box-align: center;
-ms-flex-align: center;
align-items: center;
overflow-y: hidden;
-webkit-transform: translateX(5%);
transform: translateX(5%);
}
@media (min-width: 54em) {
.slide__header {
-webkit-transform: translateX(-5%);
transform: translateX(-5%);
}
}
.slide__title {
font-family: Montserrat, helvetica;
font-size: 2.5em;
font-weight: 700;
color: #111;
overflow-y: hidden;
}
@media (min-width: 54em) {
.slide__title { font-size: 5em; }
}
.slide__title .title-line {
display: block;
overflow-y: hidden;
}
.slide__title .title-line span {
display: inline-block;
-webkit-transform: translate3d(0, 140%, 0);
transform: translate3d(0, 140%, 0);
opacity: 0;
-webkit-transition: opacity 0.8s ease, -webkit-transform 0.4s ease;
transition: opacity 0.8s ease, -webkit-transform 0.4s ease;
transition: transform 0.4s ease, opacity 0.8s ease;
transition: transform 0.4s ease, opacity 0.8s ease, -webkit-transform 0.4s ease;
}
.slide__title .title-line span:nth-child(1) {
-webkit-transition-delay: 0.15s;
transition-delay: 0.15s;
}
.slide__title .title-line span:nth-child(2) {
-webkit-transition-delay: 0.3s;
transition-delay: 0.3s;
}
.is-active .slide__title .title-line span {
-webkit-transform: translate3d(0, 0%, 0);
transform: translate3d(0, 0%, 0);
opacity: 1;
-webkit-transition: opacity 0.1s ease, -webkit-transform 0.6s cubic-bezier(0.77, 0, 0.175, 1);
transition: opacity 0.1s ease, -webkit-transform 0.6s cubic-bezier(0.77, 0, 0.175, 1);
transition: transform 0.6s cubic-bezier(0.77, 0, 0.175, 1), opacity 0.1s ease;
transition: transform 0.6s cubic-bezier(0.77, 0, 0.175, 1), opacity 0.1s ease, -webkit-transform 0.6s cubic-bezier(0.77, 0, 0.175, 1);
}
.is-active .slide__title .title-line:nth-of-type(2n) span {
-webkit-transition-delay: 0.2s;
transition-delay: 0.2s;
}
.slide__figure {
z-index: 7;
position: absolute;
left: 0;
right: 0;
margin: 0 auto;
height: 100%;
width: 100%;
-webkit-transition: -webkit-transform 0.5s cubic-bezier(0.19, 1, 0.22, 1);
transition: -webkit-transform 0.5s cubic-bezier(0.19, 1, 0.22, 1);
transition: transform 0.5s cubic-bezier(0.19, 1, 0.22, 1);
transition: transform 0.5s cubic-bezier(0.19, 1, 0.22, 1), -webkit-transform 0.5s cubic-bezier(0.19, 1, 0.22, 1);
}
.is-sliding .slide__figure {
-webkit-transform: scale(0.8);
transform: scale(0.8);
-webkit-transition: -webkit-transform 0.5s cubic-bezier(0.19, 1, 0.22, 1);
transition: -webkit-transform 0.5s cubic-bezier(0.19, 1, 0.22, 1);
transition: transform 0.5s cubic-bezier(0.19, 1, 0.22, 1);
transition: transform 0.5s cubic-bezier(0.19, 1, 0.22, 1), -webkit-transform 0.5s cubic-bezier(0.19, 1, 0.22, 1);
}
.slide__img {
position: relative;
display: block;
background-size: cover;
background-attachment: fixed;
background-position: 50%;
-webkit-backface-visibility: hidden;
height: 0%;
width: 100%;
-webkit-filter: grayscale(0%);
filter: grayscale(0%);
-webkit-transition: height 1s 1.4s cubic-bezier(0.19, 1, 0.22, 1), -webkit-filter 0.4s 0.1s ease;
transition: height 1s 1.4s cubic-bezier(0.19, 1, 0.22, 1), -webkit-filter 0.4s 0.1s ease;
transition: height 1s 1.4s cubic-bezier(0.19, 1, 0.22, 1), filter 0.4s 0.1s ease;
transition: height 1s 1.4s cubic-bezier(0.19, 1, 0.22, 1), filter 0.4s 0.1s ease, -webkit-filter 0.4s 0.1s ease;
}
.is-active .slide__img {
height: 100%;
opacity: 1;
-webkit-transition: height 0.5s 0.3s cubic-bezier(0.77, 0, 0.175, 1), -webkit-filter 0.4s 0.1s ease;
transition: height 0.5s 0.3s cubic-bezier(0.77, 0, 0.175, 1), -webkit-filter 0.4s 0.1s ease;
transition: height 0.5s 0.3s cubic-bezier(0.77, 0, 0.175, 1), filter 0.4s 0.1s ease;
transition: height 0.5s 0.3s cubic-bezier(0.77, 0, 0.175, 1), filter 0.4s 0.1s ease, -webkit-filter 0.4s 0.1s ease;
}
.is-sliding .slide__img {
-webkit-filter: grayscale(100%);
filter: grayscale(100%);
}
4. The slice slider requires the latest version of jQuery library.
<script src="//code.jquery.com/jquery-3.1.1.min.js"></script>
5. The main JavaScript (JQuery script) to active the slice slider.
(function ($) {
var SliceSlider = {
settings: {
delta: 0,
currentSlideIndex: 0,
scrollThreshold: 40,
slides: $('.slide'),
numSlides: $('.slide').length,
navPrev: $('.js-prev'),
navNext: $('.js-next')
},
init: function () {
s = this.settings;
this.bindEvents();
},
bindEvents: function () {
s.slides.on({ 'DOMMouseScroll mousewheel': SliceSlider.handleScroll });
s.navPrev.on({ 'click': SliceSlider.prevSlide });
s.navNext.on({ 'click': SliceSlider.nextSlide });
$(document).keyup(function (e) {
if (e.which === 37 || e.which === 38) {
SliceSlider.prevSlide();
}
if (e.which === 39 || e.which === 40) {
SliceSlider.nextSlide();
}
});
},
handleScroll: function (e) {
if (e.originalEvent.detail < 0 || e.originalEvent.wheelDelta > 0) {
s.delta--;
if (Math.abs(s.delta) >= s.scrollThreshold) {
SliceSlider.prevSlide();
}
} else {
s.delta++;
if (s.delta >= s.scrollThreshold) {
SliceSlider.nextSlide();
}
}
return false;
},
showSlide: function () {
s.delta = 0;
if ($('body').hasClass('is-sliding')) {
return;
}
s.slides.each(function (i, slide) {
$(slide).toggleClass('is-active', i === s.currentSlideIndex);
$('body').addClass('is-sliding');
setTimeout(function () {
$('body').removeClass('is-sliding');
}, 1000);
});
},
prevSlide: function () {
if (s.currentSlideIndex <= 0) {
s.currentSlideIndex = s.numSlides;
}
s.currentSlideIndex--;
SliceSlider.showSlide();
},
nextSlide: function () {
s.currentSlideIndex++;
if (s.currentSlideIndex >= s.numSlides) {
s.currentSlideIndex = 0;
}
SliceSlider.showSlide();
}
};
SliceSlider.init();
}(jQuery));
This awesome jQuery plugin is developed by StephenScaff. For more Advanced Usages, please check the demo page or visit the official website.










