Fullscreen Expanding Accordion / Slider With jQuery And CSS3
| File Size: | 2.9 KB |
|---|---|
| Views Total: | 10931 |
| Last Update: | |
| Publish Date: | |
| Official Website: | Go to website |
| License: | MIT |
A jQuery & CSS/CSS3 based responsive fullscreen accordion/slider where the child slides will smoothly collapse and expand on mouse move.
How to use it:
1. Add your custom slides to the accordion slider following the html structure as this:
<div class="container">
<div data-target='1' class="slide slide--1">
<div class="slide__text slide__text--1">Slide 1</div>
<div class="slide__bg"></div>
<div class="slide__img">
<div class="slide__close"></div>
<div class="slide__img-wrapper"> </div>
</div>
<div class="slide__bg-dark"></div>
</div>
<div data-target='2' class="slide slide--2">
<div class="slide__text">Slide 2</div>
<div class="slide__bg"></div>
<div class="slide__img">
<div class="slide__close"></div>
<div class="slide__img-wrapper"> </div>
</div>
<div class="slide__bg-dark"></div>
</div>
<div data-target='3' class="slide slide--3">
<div class="slide__text">Slide 3</div>
<div class="slide__bg"></div>
<div class="slide__img">
<div class="slide__close"></div>
<div class="slide__img-wrapper"> </div>
</div>
<div class="slide__bg-dark"></div>
</div>
<div data-target='4' class="slide slide--4">
<div class="slide__text">Slide 4</div>
<div class="slide__bg"></div>
<div class="slide__img">
<div class="slide__close"></div>
<div class="slide__img-wrapper"> </div>
</div>
<div class="slide__bg-dark"></div>
</div>
</div>
2. The primary CSS styles for the accordion slider.
.container {
position: relative;
height: 100vh;
overflow: hidden;
}
.slide {
position: absolute;
top: 0;
left: 0;
width: 100%;
height: 100%;
will-change: transform;
overflow: hidden;
cursor: pointer;
}
.slide__bg {
position: absolute;
top: 0;
left: 0;
-webkit-transform-origin: center left;
transform-origin: center left;
width: 100%;
height: 100%;
background-color: #161616;
z-index: 1;
-webkit-transition: 950ms;
transition: 950ms;
will-change: transform;
}
.slide__img {
position: relative;
height: 100%;
}
.slide__img-wrapper {
position: absolute;
top: -10%;
left: -10%;
width: 125%;
height: 120%;
-webkit-transform: translate3d(0, 0, 0);
transform: translate3d(0, 0, 0);
-webkit-transition: 950ms;
transition: 950ms;
will-change: transform;
}
.slide__bg-dark {
position: absolute;
top: 0;
left: 0;
width: 100%;
height: 100%;
background-color: rgba(0, 0, 0, 0.5);
opacity: 0;
-webkit-transition: 350ms;
transition: 350ms;
z-index: 2;
}
.slide__text {
position: absolute;
top: 50%;
left: 5%;
width: 23%;
text-transform: uppercase;
word-wrap: break-word;
color: #fff;
font-size: 45px;
font-weight: 800;
-webkit-transform: translate3d(0, -50%, 0) rotate(0.01deg);
transform: translate3d(0, -50%, 0) rotate(0.01deg);
will-change: transform, opacity;
-webkit-transition: 750ms;
transition: 750ms;
opacity: 0;
z-index: 1;
}
@media screen and (max-width: 960px) {
.slide__text { font-size: 30px; }
}
3. Animate the active slide using CSS3 transforms and transitions.
.active .slide--1 .slide__bg {
-webkit-transform: scale(0, 1);
transform: scale(0, 1);
-webkit-transition: 950ms;
transition: 950ms;
}
.active .slide--1 .slide__img-wrapper {
-webkit-transform: translate3d(-150px, 0, 0);
transform: translate3d(-150px, 0, 0);
-webkit-transition: 2000ms;
transition: 2000ms;
}
.active .slide--1 {
-webkit-transform: translate3d(-100%, 0, 0);
transform: translate3d(-100%, 0, 0);
-webkit-transition: -webkit-transform 950ms 0ms;
transition: -webkit-transform 950ms 0ms;
transition: transform 950ms 0ms;
transition: transform 950ms 0ms, -webkit-transform 950ms 0ms;
}
.active .slide--1 .slide__bg {
-webkit-transform: scale(0, 1);
transform: scale(0, 1);
-webkit-transition: 1900ms 0ms;
transition: 1900ms 0ms;
}
.active .slide--1 .slide__img-wrapper {
-webkit-transform: translate3d(-150px, 0, 0);
transform: translate3d(-150px, 0, 0);
-webkit-transition: 2000ms 0ms;
transition: 2000ms 0ms;
}
.active .slide--2 {
-webkit-transform: translate3d(-75%, 0, 0);
transform: translate3d(-75%, 0, 0);
-webkit-transition: -webkit-transform 950ms 1235ms;
transition: -webkit-transform 950ms 1235ms;
transition: transform 950ms 1235ms;
transition: transform 950ms 1235ms, -webkit-transform 950ms 1235ms;
}
.active .slide--2 .slide__bg {
-webkit-transform: scale(0, 1);
transform: scale(0, 1);
-webkit-transition: 1900ms 1235ms;
transition: 1900ms 1235ms;
}
.active .slide--2 .slide__img-wrapper {
-webkit-transform: translate3d(-150px, 0, 0);
transform: translate3d(-150px, 0, 0);
-webkit-transition: 2000ms 1235ms;
transition: 2000ms 1235ms;
}
.active .slide--3 {
-webkit-transform: translate3d(-50%, 0, 0);
transform: translate3d(-50%, 0, 0);
-webkit-transition: -webkit-transform 950ms 2470ms;
transition: -webkit-transform 950ms 2470ms;
transition: transform 950ms 2470ms;
transition: transform 950ms 2470ms, -webkit-transform 950ms 2470ms;
}
.active .slide--3 .slide__bg {
-webkit-transform: scale(0, 1);
transform: scale(0, 1);
-webkit-transition: 1900ms 2470ms;
transition: 1900ms 2470ms;
}
.active .slide--3 .slide__img-wrapper {
-webkit-transform: translate3d(-150px, 0, 0);
transform: translate3d(-150px, 0, 0);
-webkit-transition: 2000ms 2470ms;
transition: 2000ms 2470ms;
}
.active .slide--4 {
-webkit-transform: translate3d(-25%, 0, 0);
transform: translate3d(-25%, 0, 0);
-webkit-transition: -webkit-transform 950ms 3705ms;
transition: -webkit-transform 950ms 3705ms;
transition: transform 950ms 3705ms;
transition: transform 950ms 3705ms, -webkit-transform 950ms 3705ms;
}
.active .slide--4 .slide__bg {
-webkit-transform: scale(0, 1);
transform: scale(0, 1);
-webkit-transition: 1900ms 3705ms;
transition: 1900ms 3705ms;
}
.active .slide--4 .slide__img-wrapper {
-webkit-transform: translate3d(-150px, 0, 0);
transform: translate3d(-150px, 0, 0);
-webkit-transition: 2000ms 3705ms;
transition: 2000ms 3705ms;
}
4. Style the slides and add custom background images to them.
.slide__text--1 { left: 8%; }
.slide { left: 100%; }
.slide--1 { z-index: 0; }
.slide--1 .slide__img-wrapper {
background: url("1.jpg") center center no-repeat;
background-size: cover;
}
.slide--2 { z-index: 1; }
.slide--2 .slide__img-wrapper {
background: url("2.jpg") center center no-repeat;
background-size: cover;
}
.slide--3 { z-index: 2; }
.slide--3 .slide__img-wrapper {
background: url("3.jpg") center center no-repeat;
background-size: cover;
}
.slide--4 { z-index: 3; }
.slide--4 .slide__img-wrapper {
background: url("4.jpg") center center no-repeat;
background-size: cover;
}
5. Place the latest version of JQuery library at the bottom of the webpage.
<script src="//code.jquery.com/jquery-3.1.1.slim.min.js"></script>
6. The core JavaScript (jQuery script) to active the accordion slider.
$(document).ready(function() {
const $container = $('.container');
const $slide = $('.slide');
const $text = $('.slide__text');
const numSlides = 4;
const initialAnimDur = 5705;
const animDelay = 1000;
let initialAnim = true;
let clickAnim = false;
$(document).on('click', '.slide__bg-dark', function() {
if (initialAnim || clickAnim) return;
let _this = $(this).parent();
let target = +_this.attr('data-target');
clickAnim = true;
_this.css({
'transform': 'translate3d(-100%, 0, 0)',
'transition': '750ms',
'cursor': 'default'
})
_this.find('.slide__img-wrapper').css({
'transform': 'translate3d(0, 0, 0) scale(.95, .95)',
'transition': '2000ms'
})
for(let i = target, length = $slide.length; i < length; i++) {
$('.slide--' + (i + 1)).css({
'transform': 'translate3d(0, 0, 0)',
'transition': '750ms'
})
}
for(let i = target, length = $slide.length; i > 1; i--) {
$('.slide--' + (i - 1)).css({
'transform': 'translate3d(-125%, 0, 0)',
'transition': '750ms'
})
}
setTimeout(function() {
$slide.not(_this).find('.slide__bg-dark').css({
'opacity': '0'
})
}, 750)
_this.find('.slide__text').css({
'transform': 'translate3d(150px, -40%, 0)',
'opacity': '1',
'transition': '2000ms',
'-webkit-transition': '2000ms'
})
});
$(document).on('mousemove', '.slide', function() {
if(initialAnim || clickAnim) return;
let _this = $(this);
let target = +_this.attr('data-target');
_this.css({
'transform': 'translate3d(-' + (((100 / numSlides) * (numSlides - (target - 1))) + 5) + '%, 0, 0)',
'transition': '750ms'
})
_this.find('.slide__text').css({
'transform': 'translate3d(0, -40%, 0) rotate(0.01deg)',
'-moz-transform': 'translate3d(0, -40%, 0) rotate(0.01deg)',
'opacity': '1',
'transition': '750ms',
'-webkit-transition': '750ms'
})
for(let i = target, length = $slide.length; i < length; i++) {
$('.slide--' + (i + 1)).css({
'transform': 'translate3d(-' + (((100 / numSlides) * (numSlides - ((i + 1) - 1))) - 5) + '%, 0, 0)',
'transition': '750ms'
})
}
for(let i = target; i > 1; i--) {
$('.slide--' + (i - 1)).css({
'transform': 'translate3d(-' + (((100 / numSlides) * (numSlides - ((i - 1) - 1))) + 5) + '%, 0, 0)',
'transition': '750ms'
})
}
_this.find('.slide__img-wrapper').css({
'transform': 'translate3d(-200px, 0, 0) scale(.85, .85)',
'transition': '750ms'
})
$slide.not(_this).find('.slide__img-wrapper').css({
'transform': 'translate3d(-200px, 0, 0) scale(.90, .90)',
'transition': '1000ms'
})
$slide.not(_this).find('.slide__bg-dark').css({
'opacity': '.75'
})
});
$(document).on('mouseleave', '.slide', function() {
if(initialAnim || clickAnim) return;
let _this = $(this);
let target = +_this.attr('data-target');
for(let i = 1, length = $slide.length; i <= length; i++) {
$('.slide--' + i).css({
'transform': 'translate3d(-' + (100 / numSlides) * (numSlides - (i - 1)) + '%, 0, 0)',
'transition': '1000ms'
})
}
$slide.find('.slide__img-wrapper').css({
'transform': 'translate3d(-200px, 0, 0) scale(1, 1)',
'transition': '750ms'
})
$slide.find('.slide__bg-dark').css({
'opacity': '0'
})
$text.css({
'transform': 'translate3d(0, -50%, 0) rotate(0.01deg)',
'opacity': '0',
'transition': '200ms',
'-webkit-transition': '200ms'
})
});
$(document).on('click', '.slide__close', function() {
setTimeout(function() {
clickAnim = false;
}, 1000);
for(let i = 1, length = $slide.length; i <= length; i++) {
$('.slide--' + i).css({
'transform': 'translate3d(-' + (100 / numSlides) * (numSlides - (i - 1)) + '%, 0, 0)',
'transition': '1000ms',
'cursor': 'pointer'
})
}
$text.css({
'transform': 'translate3d(150px, -40%, 0)',
'opacity': '0',
'transition': '200ms',
'-webkit-transition': '200ms'
})
setTimeout(function() {
$text.css({
'transform': 'translate3d(0, -50%, 0)'
})
}, 200)
})
setTimeout(function() {
$container.addClass('active');
}, animDelay);
setTimeout(function() {
initialAnim = false;
}, initialAnimDur + animDelay);
});
This awesome jQuery plugin is developed by mrspok407. For more Advanced Usages, please check the demo page or visit the official website.











