A split screen gallery for telling a story or showing a slideshow. It's buggy on iOS because of the way it deals with fixed positioned elements.
A Pen by Eduardo Bouças on CodePen.
A split screen gallery for telling a story or showing a slideshow. It's buggy on iOS because of the way it deals with fixed positioned elements.
A Pen by Eduardo Bouças on CodePen.
| <article id="slide-0" class="slide slide--locked"> | |
| <img src="http://lorempixel.com/g/768/1152/people/8"> | |
| </article> | |
| <article id="slide-1" class="slide slide--text slide--locked"> | |
| <div class="slide__inner"> | |
| <p>A Split screen gallery</p> | |
| <p class="demo-arrow">↓</p> | |
| <p class="demo-instructions">Scroll down</p> | |
| </div> | |
| </article> | |
| <article id="slide-2" class="slide slide--scrolling slide--text"> | |
| <div class="slide__inner"> | |
| <p>It's a nice way to tell a story. Works as an image gallery as well.</p> | |
| </div> | |
| </article> | |
| <article id="slide-3" class="slide"> | |
| <img src="http://lorempixel.com/g/768/1152/people/3"> | |
| </article> | |
| <article id="slide-4" class="slide"> | |
| <img src="http://lorempixel.com/g/768/1152/people/9"> | |
| </article> | |
| <article id="slide-5" class="slide slide--text"> | |
| <div class="slide__inner"> | |
| <p>Doesn't work on iOS because it uses fixed positioning. Fallback is necessary.</p> | |
| </div> | |
| </article> | |
| <article id="slide-6" class="slide"> | |
| <img src="http://www2.eduardoboucas.com/images/ElsaBW2.jpg"> | |
| </article> | |
| <article id="slide-7" class="slide slide--text"> | |
| <div class="slide__inner"> | |
| <p>But that's life, isn't it?</p> | |
| <p class="demo-instructions">The end.</p> | |
| </div> | |
| </article> | |
| var windowHeight = $(window).height(); | |
| var $slides = $('.slide'); | |
| function init() { | |
| $('body').css('height', ($slides.length * 100) + '%'); | |
| $slides.each(function(index) { | |
| $(this).css({ | |
| 'z-index': index, | |
| 'top': (index * 100) + '%' | |
| }); | |
| }); | |
| var $scrollingSlide = $('.slide--scrolling').last(); | |
| var scrollingSlideIndex = $('.slide').index($scrollingSlide); | |
| $(window).scrollTop((scrollingSlideIndex - 1) * windowHeight); | |
| } | |
| function adjustPositions() { | |
| var scrollPosition = $(window).scrollTop(); | |
| var scrollingSlide = Math.floor(scrollPosition / windowHeight) + 1; | |
| var $scrollingSlide = $('#slide-' + scrollingSlide); | |
| $scrollingSlide.prevAll('.slide').removeClass('slide--scrolling').addClass('slide--locked'); | |
| $scrollingSlide.removeClass('slide--locked').addClass('slide--scrolling'); | |
| $scrollingSlide.nextAll('.slide').removeClass('slide--locked').removeClass('slide--scrolling'); | |
| } | |
| $(document).ready(function() { | |
| init(); | |
| }); | |
| $(window).scroll(function () { | |
| adjustPositions(); | |
| }); |
| <script src="//cdnjs.cloudflare.com/ajax/libs/jquery/2.1.3/jquery.min.js"></script> |
| .slide { | |
| position: fixed; | |
| width: 50%; | |
| height: 100%; | |
| float: left; | |
| overflow: hidden; | |
| background-color: #ddd; | |
| &:nth-of-type(even) { | |
| right: 0; | |
| } | |
| &:nth-of-type(odd) { | |
| left: 0; | |
| } | |
| } | |
| .slide--text { | |
| background-color: white; | |
| padding: 30px; | |
| color: black; | |
| font-family: 'Fjalla One', sans-serif; | |
| text-align: center; | |
| text-transform: uppercase; | |
| } | |
| .slide__inner { | |
| height: 100%; | |
| border: 2px dashed black; | |
| padding: 20% 5% 5% 5%; | |
| font-size: 2em; | |
| } | |
| .slide--locked, | |
| .slide--sticky { | |
| position: fixed !important; | |
| top: 0 !important; | |
| } | |
| .slide--scrolling { | |
| position: absolute; | |
| } | |
| // Demo stuff and reset | |
| * { | |
| box-sizing: border-box; | |
| } | |
| html, body { | |
| margin: 0; | |
| } | |
| img { | |
| width: 100%; | |
| } | |
| .demo-instructions { | |
| font-size: 0.5em; | |
| } | |
| .demo-arrow { | |
| position: relative; | |
| animation: demo-arrow 0.4s ease-in-out infinite alternate; | |
| } | |
| a { | |
| color: inherit; | |
| } | |
| @keyframes demo-arrow { | |
| 0% { | |
| top: 0; | |
| } | |
| 100% { | |
| top: 10px; | |
| } | |
| } |
| <link href="https://fonts.googleapis.com/css?family=Fjalla+One" rel="stylesheet" /> |