Magician
Magician

Reputation: 2117

Self rotating image using AngularJS

I am trying to create a self rotating image viewer in AngularJS. Sorry if the question seems stupid, but I can't figure it out the angularJS way. I know I can hack it there using jQuery, but I think it should doable in AngularJS alone.

The HTML:

<div ng-controller="rotatorController">
    <div ng-switch on="pic" ng-animate=" 'animate' " id="rotator">
        <div ng-switch-when="1"><img src="/home/1.jpg"></div>
        <div ng-switch-when="2"><img src="/home/2.jpg"></div>
        <div ng-switch-when="3"><img src="/home/3.jpg"></div>
    </div>
    <div style="position: absolute; top: 600px" id="indexbuttons">
        <button ng-click="pic = '1';" class="button">1</button>
        <button ng-click="pic = '2';" class="button">2</button>
        <button ng-click="pic = '3';" class="button">3</button>
    </div>
</div>

The CSS:

div#rotator {
    margin: 0;
    padding: 0;
    border: 0;
    position: absolute;
}

.animate-enter,
.animate-leave
{
    -webkit-transition: 825ms cubic-bezier(0.455, 0.030, 0.515, 0.955) all;
    -moz-transition: 825ms cubic-bezier(0.455, 0.030, 0.515, 0.955) all;
    -ms-transition: 825ms cubic-bezier(0.455, 0.030, 0.515, 0.955) all;
    -o-transition: 825ms cubic-bezier(0.455, 0.030, 0.515, 0.955) all;
    transition: 825ms cubic-bezier(0.455, 0.030, 0.515, 0.955) all;
    position: absolute;
}

.animate-enter {
    left: 100%;
}
.animate-enter.animate-enter-active {
    left: 0;
}

.animate-leave {
    left: 0;
}
.animate-leave.animate-leave-active{
    left: -100%;
}

How do I send click event to indexbuttons in angularJS? Or is there a better way to loop those pictures?

Plunker: http://plnkr.co/edit/QiYidN?p=catalogue

Thank you

Upvotes: 3

Views: 2889

Answers (1)

pasine
pasine

Reputation: 11543

You have to add a loop in your controller.

app.controller('rotatorController', ['$scope', '$timeout', function($scope, $timeout) {
  $scope.pic = 1;

  var slideImage = function() {
    var loop = $timeout(function changePic() {
        if($scope.pic < 2){
          $scope.pic++;
        } else {
          $scope.pic = 1;
        }
        loop = $timeout(changePic, 2000);
    },2000);
  }();

}])  

Here is the plunker

Upvotes: 3

Related Questions