pkdkk pkdkk - 3 months ago 86
AngularJS Question

AngularJS animate image on src change

I have an AnuglarJS app, where I load/change some images from a webservice...

Controller

.controller('PlayerCtrl', function($scope, programService) {
....
programService.refresh(function(data) {
$scope.program = data;
});
....


Template

<img src="{{program.image}}" />


When my app updates from the webservice the images changes as expected, I just want to make an fadeout / fadein when this happens, how can that be done?

Is it possible to always make a fadeout/in when a image src changes?

Answer

Thanks for the responses -

I ended up doing this, and it works ;)

--- Directive ---

.directive('fadeIn', function($timeout){
    return {
        restrict: 'A',
        link: function($scope, $element, attrs){
            $element.addClass("ng-hide-remove");
            $element.on('load', function() {
                $element.addClass("ng-hide-add");
            });
        }
    };
})

--- Template ---

<img ng-src="{{program.image}}" class="animate-show" fade-in />

--- CSS ---

.animate-show.ng-hide-add, .animate-show.ng-hide-remove {
    transition: all linear 0.5s;
    display: block !important;
}

.animate-show.ng-hide-add.ng-hide-add-active, .animate-show.ng-hide-remove {
    opacity: 0;
}

.animate-show.ng-hide-add, .animate-show.ng-hide-remove.ng-hide-remove-active {
    opacity: 1;
}