<!DOCTYPE html>
<html>

  <head>
    <script data-require="jquery@2.0.3" data-semver="2.0.3" src="http://code.jquery.com/jquery-2.0.3.min.js"></script>
    <link rel="stylesheet" href="style.css" />
    <script src="script.js"></script>
    <style>
      .help {
        position: relative;
        top: 110px;
      }
    </style>
  </head>

  <body>
    <article>
      <section class="prev">
        <h2>Slide 1</h2>
        <p>This is the first slide</p>
      </section>
      <section class="active">
        <h2>Slide 2</h2>
        <p>Second slide</p>
      </section>
      <section class="next">
        <h2>Slide 3</h2>
        <p>Another slide</p>
      </section>
      <section class="inactive after">
        <h2>Slide 4</h2>
        <p>Last slide</p>
      </section>
    </article>

    <div class="help">
    <h1>Presentation demo</h1>
    <p>Small slide-based presentation engine
      showing how to use HTML and CSS3 transitions
      to create in browser experience similar
      to PowerPoint, Prezi, etc. For full implementation, check out
            <a href="http://glebbahmutov.com/slides-now">slides-now</a>
    </p>
    <p>To use: press right/left arrow key to go to the next/previous slide.</p>
    <p>
      Gleb Bahmutov       <a href="http://glebbahmutov.com">glebbahmutov.com</a>
    </p>
    </div>
  </body>

</html>
$(function () {
  'use strict';
  var currSlide = 1;
  var allSlides = $('section');

  $(document).on('keydown', function (event) {
    if (event.keyCode === 37 && currSlide) {
      console.log('prev slide');

      $(allSlides[currSlide - 2])
        .removeClass('inactive before')
        .addClass('prev');

      $(allSlides[currSlide - 1])
        .removeClass('prev')
        .addClass('active');

      $(allSlides[currSlide])
        .removeClass('active')
        .addClass('next');

      $(allSlides[currSlide + 1])
        .removeClass('next')
        .addClass('inactive after');

      currSlide -= 1;
    } else if (event.keyCode === 39 && currSlide < allSlides.length - 1) {
      console.log('next slide');

      $(allSlides[currSlide - 1])
        .removeClass('prev')
        .addClass('inactive before');

      $(allSlides[currSlide])
        .removeClass('active')
        .addClass('prev');

      $(allSlides[currSlide + 1])
        .removeClass('next')
        .addClass('active');

      $(allSlides[currSlide + 2])
        .removeClass('after inactive')
        .addClass('next');
      $(allSlides.slice[currSlide + 3])
        .addClass('after');
      currSlide += 1;
    }
    event.preventDefault();
  });
});
article {
		-webkit-perspective: 200px;
		-moz-perspective: 200px;
		-ms-perspective: 200px;
		-o-perspective: 200px;
		perspective: 200px;
		position: absolute;
		top: 0;
		right: 0;
		left: 0;
		bottom: 0;
		height: 110px;
		overflow-y: hidden;
}

section {
  -webkit-transform: none;
	-moz-transform: none;
	-ms-transform: none;
	-o-transform: none;
	transform: none;

  display: table-cell;
  width: 200px;
  height: 100px;
  border: 1px solid black;
  border-radius: 5px;
  padding-left: 1em;
  margin-left: 50%;
  left: -100px;
  position: absolute;

  -webkit-transition: -webkit-transform .7s ease, opacity .7s ease;
	-moz-transition: -moz-transform .7s ease, opacity .7s ease;
	-ms-transition: -ms-transform .7s ease, opacity .7s ease;
	-o-transition: -o-transform .7s ease, opacity .7s ease;
	transition: transform .7s ease, opacity .7s ease;
}

.before {
  -webkit-transform: translate3d(-220%, 0, 0);
  -moz-transform: translate3d(-220%, 0, 0);
  -ms-transform: translate3d(-220%, 0, 0);
  -o-transform: translate3d(-220%, 0, 0);
  transform: translate3d(-220%, 0, 0);
  opacity: 0.01;
}

.prev {
  -webkit-transform: translate3d(-110%, 0, 0);
  -moz-transform: translate3d(-110%, 0, 0);
  -ms-transform: translate3d(-110%, 0, 0);
  -o-transform: translate3d(-110%, 0, 0);
  transform: translate3d(-110%, 0, 0);
  opacity: 0.25;
}

.active {
  opacity: 1;
}

.next {
  -webkit-transform: translate3d(110%, 0, 0);
  -moz-transform: translate3d(110%, 0, 0);
  -ms-transform: translate3d(110%, 0, 0);
  -o-transform: translate3d(110%, 0, 0);
  transform: translate3d(110%, 0, 0);
  opacity: 0.25;
}

.after {
  -webkit-transform: translate3d(220%, 0, 0);
  -moz-transform: translate3d(220%, 0, 0);
  -ms-transform: translate3d(220%, 0, 0);
  -o-transform: translate3d(220%, 0, 0);
  transform: translate3d(220%, 0, 0);
  opacity: 0.01;
}

.inactive {
  visibility: hidden;
  opacity: 0;
}
# Tiny presentation demo

This demo shows how to make a slide-based
presentation engine similar to PowerPoint
using HTML5 and CSS3 transitions.

## author

Gleb Bahmutov

[@bahmutov](https://twitter.com/bahmutov),
[glebbahmutov.com](http://glebbahmutov.com/)