Vertical slideshow in split screen
A Pen by Fabio Ottaviani on CodePen.
| <!-- | |
| Follow me on | |
| Dribbble: https://dribbble.com/supahfunk | |
| Twitter: https://twitter.com/supahfunk | |
| Codepen: https://codepen.io/supah/ | |
| --> | |
| <div class="split-slideshow"> | |
| <div class="slideshow"> | |
| <div class="slider"> | |
| <div class="item"> | |
| <img src="https://raw.githubusercontent.com/supahfunk/supah-codepen/master/canyon-2.jpg" /> | |
| </div> | |
| <div class="item"> | |
| <img src="https://raw.githubusercontent.com/supahfunk/supah-codepen/master/canyon-3.jpg" /> | |
| </div> | |
| <div class="item"> | |
| <img src="https://raw.githubusercontent.com/supahfunk/supah-codepen/master/canyon-4.jpg" /> | |
| </div> | |
| <div class="item"> | |
| <img src="https://raw.githubusercontent.com/supahfunk/supah-codepen/master/canyon-1.jpg" /> | |
| </div> | |
| </div> | |
| </div> | |
| <div class="slideshow-text"> | |
| <div class="item">Canyon</div> | |
| <div class="item">Desert</div> | |
| <div class="item">Erosion</div> | |
| <div class="item">Shape</div> | |
| </div> | |
| </div> |
| var $slider = $('.slideshow .slider'), | |
| maxItems = $('.item', $slider).length, | |
| dragging = false, | |
| tracking, | |
| rightTracking; | |
| $sliderRight = $('.slideshow').clone().addClass('slideshow-right').appendTo($('.split-slideshow')); | |
| rightItems = $('.item', $sliderRight).toArray(); | |
| reverseItems = rightItems.reverse(); | |
| $('.slider', $sliderRight).html(''); | |
| for (i = 0; i < maxItems; i++) { | |
| $(reverseItems[i]).appendTo($('.slider', $sliderRight)); | |
| } | |
| $slider.addClass('slideshow-left'); | |
| $('.slideshow-left').slick({ | |
| vertical: true, | |
| verticalSwiping: true, | |
| arrows: false, | |
| infinite: true, | |
| dots: true, | |
| speed: 1000, | |
| cssEase: 'cubic-bezier(0.7, 0, 0.3, 1)' | |
| }).on('beforeChange', function(event, slick, currentSlide, nextSlide) { | |
| if (currentSlide > nextSlide && nextSlide == 0 && currentSlide == maxItems - 1) { | |
| $('.slideshow-right .slider').slick('slickGoTo', -1); | |
| $('.slideshow-text').slick('slickGoTo', maxItems); | |
| } else if (currentSlide < nextSlide && currentSlide == 0 && nextSlide == maxItems - 1) { | |
| $('.slideshow-right .slider').slick('slickGoTo', maxItems); | |
| $('.slideshow-text').slick('slickGoTo', -1); | |
| } else { | |
| $('.slideshow-right .slider').slick('slickGoTo', maxItems - 1 - nextSlide); | |
| $('.slideshow-text').slick('slickGoTo', nextSlide); | |
| } | |
| }).on("mousewheel", function(event) { | |
| event.preventDefault(); | |
| if (event.deltaX > 0 || event.deltaY < 0) { | |
| $(this).slick('slickNext'); | |
| } else if (event.deltaX < 0 || event.deltaY > 0) { | |
| $(this).slick('slickPrev'); | |
| }; | |
| }).on('mousedown touchstart', function(){ | |
| dragging = true; | |
| tracking = $('.slick-track', $slider).css('transform'); | |
| tracking = parseInt(tracking.split(',')[5]); | |
| rightTracking = $('.slideshow-right .slick-track').css('transform'); | |
| rightTracking = parseInt(rightTracking.split(',')[5]); | |
| }).on('mousemove touchmove', function(){ | |
| if (dragging) { | |
| newTracking = $('.slideshow-left .slick-track').css('transform'); | |
| newTracking = parseInt(newTracking.split(',')[5]); | |
| diffTracking = newTracking - tracking; | |
| $('.slideshow-right .slick-track').css({'transform': 'matrix(1, 0, 0, 1, 0, ' + (rightTracking - diffTracking) + ')'}); | |
| } | |
| }).on('mouseleave touchend mouseup', function(){ | |
| dragging = false; | |
| }); | |
| $('.slideshow-right .slider').slick({ | |
| swipe: false, | |
| vertical: true, | |
| arrows: false, | |
| infinite: true, | |
| speed: 950, | |
| cssEase: 'cubic-bezier(0.7, 0, 0.3, 1)', | |
| initialSlide: maxItems - 1 | |
| }); | |
| $('.slideshow-text').slick({ | |
| swipe: false, | |
| vertical: true, | |
| arrows: false, | |
| infinite: true, | |
| speed: 900, | |
| cssEase: 'cubic-bezier(0.7, 0, 0.3, 1)' | |
| }); |
| <script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.1.1/jquery.min.js"></script> | |
| <script src="https://cdnjs.cloudflare.com/ajax/libs/jquery-mousewheel/3.1.12/jquery.mousewheel.js"></script> | |
| <script src="https://cdnjs.cloudflare.com/ajax/libs/slick-carousel/1.6.0/slick.min.js"></script> |
Vertical slideshow in split screen
A Pen by Fabio Ottaviani on CodePen.
| body, | |
| html { | |
| height: 100%; | |
| background: #110101; | |
| font-family: 'Roboto', sans-serif; | |
| overflow: hidden; | |
| } | |
| .slideshow { | |
| position: absolute; | |
| z-index: 1; | |
| top: 0; | |
| left: 0; | |
| width: 100vw; | |
| height: 100vh; | |
| overflow: hidden; | |
| .slider { | |
| width: 100vw; | |
| height: 100vw; | |
| z-index: 2; | |
| * { | |
| outline: none; | |
| } | |
| .item { | |
| height: 100vh; | |
| width: 100vw; | |
| position: relative; | |
| overflow: hidden; | |
| border: none; | |
| .text { | |
| display: none; | |
| } | |
| img { | |
| min-width: 101%; | |
| min-height: 101%; | |
| position: absolute; | |
| top: 50%; | |
| left: 50%; | |
| transform: translate(-50%, -50%); | |
| } | |
| } | |
| } | |
| .slick-dots { | |
| position: fixed; | |
| z-index: 100; | |
| width: 40px; | |
| height: auto; | |
| bottom: auto; | |
| top: 50%; | |
| right: 0; | |
| transform: translateY(-50%); | |
| left: auto; | |
| color: #fff; | |
| display: block; | |
| li { | |
| display: block; | |
| width: 100%; | |
| height: auto; | |
| & button { | |
| position: relative; | |
| width: 20px; | |
| height: 15px; | |
| text-align: center; | |
| &:before { | |
| content: ''; | |
| background: #fff; | |
| color: #fff; | |
| height: 2px; | |
| width: 20px; | |
| border-radius: 0; | |
| position: absolute; | |
| top: 50%; | |
| right: 0; | |
| left: auto; | |
| transform: translateY(-50%); | |
| transition: all .3s ease-in-out; | |
| opacity: 0.6; | |
| } | |
| } | |
| &.slick-active { | |
| button { | |
| &:before { | |
| width: 40px; | |
| opacity: 1; | |
| } | |
| } | |
| } | |
| } | |
| } | |
| &.slideshow-right { | |
| left: 0; | |
| z-index: 1; | |
| width: 50vw; | |
| pointer-events: none; | |
| .slider { | |
| left: 0; | |
| position: absolute; | |
| } | |
| } | |
| } | |
| .slideshow-text { | |
| position: absolute; | |
| top: 50%; | |
| left: 50%; | |
| transform: translate(-50%, -50%); | |
| z-index: 100; | |
| font-size: 80px; | |
| width: 100vw; | |
| text-align: center; | |
| color: #fff; | |
| font-family: 'Roboto Condensed', sans-serif; | |
| font-weight: 100; | |
| pointer-events: none; | |
| text-transform: uppercase; | |
| letter-spacing: 20px; | |
| line-height: 0.8; | |
| @media (max-width: 767px) { | |
| font-size: 40px; | |
| } | |
| } |
| <link href="https://cdnjs.cloudflare.com/ajax/libs/slick-carousel/1.6.0/slick.min.css" rel="stylesheet" /> | |
| <link href="https://cdnjs.cloudflare.com/ajax/libs/slick-carousel/1.6.0/slick-theme.min.css" rel="stylesheet" /> | |
| <link href="https://fonts.googleapis.com/css?family=Roboto+Condensed:100" rel="stylesheet" /> |