var app = angular.module('plunker', ['ngAnimate'])

.controller('MainCtrl', function($scope, $rootScope) {
  var numImages = 30;
  
  $scope.images = [];                                                 // images array
  $scope.currentPage = 0;                                             // current page
  $scope.numImagesPerPage = 6;                                        // # images per page
  $scope.numPages = Math.floor(numImages / $scope.numImagesPerPage);  // # pages
  $rootScope.direction = 'right';                                         // initially can only move right
  
  for(var i=0; i<numImages; i++) {
    $scope.images.push(i);
  }
  
  $scope.next = function () {
    if ($scope.currentPage < $scope.numPages - 1) {
      $rootScope.direction = 'right';
      $scope.currentPage++;
    }
  }

  
  $scope.prev = function () {
    if ($scope.currentPage > 0) {
      $rootScope.direction = 'left';
      $scope.currentPage--;
    }
  }
})

.config(function($provide) {
        $provide.decorator("$animate", function ($delegate, $rootScope) {
            $delegate.originalLeave = $delegate.leave;
            $delegate.leave = function (element, doneCallback) {
                $(element).removeClass("right").removeClass("left").addClass($rootScope.direction);
                $delegate.originalLeave(element, doneCallback);
            };
            return $delegate;
        });
    })

.filter('offset', function () {
	return function (input, start) {
		if (!input) return [];
		start = parseInt(start, 10);
		return input.slice(start);
	};
})

.filter('partition', function ($cacheFactory) {
	var arrayCache = $cacheFactory('partition');
	return function (input, size) {
		if (!input) return [];
		if (!size) return [input];

		var result = [];
		var cachedParts;
		var inputString = JSON.stringify(input);
		
		for(var i=0; i<input.length; i+=size) {
			result.push(input.slice(i, i+size));
		}

		cachedParts = arrayCache.get(inputString+size);
		if (JSON.stringify(cachedParts) === JSON.stringify(result)) {
			return cachedParts;
		}
		arrayCache.put(inputString+size, result);
		return result;
	};
});
<!DOCTYPE html>
<html ng-app="plunker">

  <head>
    <meta charset="utf-8" />
    <title>AngularJS Plunker</title>
    <script>document.write('<base href="' + document.location + '" />');</script>
    <link rel="stylesheet" href="style.css" />
   <script data-require="jquery@*" data-semver="2.0.3" src="http://code.jquery.com/jquery-2.0.3.min.js"></script>

    <script data-require="angular.js@1.2.x" src="https://ajax.googleapis.com/ajax/libs/angularjs/1.2.17/angular.min.js" data-semver="1.2.17"></script>
    <script data-require="angular-animate@1.2.16" data-semver="1.2.16" src="http://code.angularjs.org/1.2.16/angular-animate.js"></script>
    <script src="app.js"></script>
  </head>

  <body ng-controller="MainCtrl">
    <div class="page-container">
      <div class="image-page" ng-class="direction" ng-repeat="page in images | partition: 6 | offset: currentPage | limitTo: 1">
        <ul class="image-list">
          <li class="image" ng-repeat="image in page">
            <img ng-src="http://placehold.it/100x100&text={{image}}" />
          </li>
        </ul>
      </div>
    </div>
    <div class="controls">
      <button ng-click="prev()">Prev</button>
      <button ng-click="next()">Next</button>
    </div>
  </body>

</html>
/* Put your css in here */

.page-container {
  position: relative;
  width: 360px;
  margin: 0 auto;
  height: 260px;
  overflow: hidden;
}

.image-page {
  position: absolute;
  width: 360px;
  top: 0;
  left: 0;
}
.image-list {
  padding: 0;
  list-style: none;
}

.image {
  float: left;
  margin: 10px;
}

.controls {
  clear: both;
  width: 100%;
  text-align: center;
}


/* animations */
.image-page.right.ng-enter, .image-page.right.ng-leave,
.image-page.left.ng-enter, .image-page.left.ng-leave {
	transition: all linear .5s;
	display: block !important;
}

.image-page.right.ng-enter {
	margin-left: 360px;
}
.image-page.right.ng-enter.ng-enter-active {
	margin-left: 0;
}

.image-page.right.ng-leave {
	margin-left: 0;
}
.image-page.right.ng-leave.ng-leave-active {
	margin-left: -360px;
}

.image-page.left.ng-enter {
	margin-left: -360px;
}
.image-page.left.ng-enter.ng-enter-active {
	margin-left: 0;
}

.image-page.left.ng-leave {
	margin-left: 0;
}
.image-page.left.ng-leave.ng-leave-active {
	margin-left: 360px;
}