2016-08-12 1 views
1

Попытка выцветать изображение нажатием кнопки с помощью директивы. Директива отлично работает, когда изображение сначала появляется (загрузка начальной страницы), красиво стирая его, но это не происходит при нажатии, оно просто переключается без выцветания. Как я могу получить директиву fade-in для работы с событием ng-click="onClick()"?Угловое увядание в изображении при нажатии с директивой

Я попытался добавить тайм-аут вокруг $element.addClass("ng-hide-add"); в directive, но это не сработало.

Here's a plunkr

Вот HTML:

<img ng-src="img/{{randTarotImg}}.jpg" class="tarot animate-show" ng-click="onClick()" fade-in/> 

Вот в ЯШ:

angular.module('TarotApp') 
    .controller('TarotCtrl', function ($scope) { 

     $scope.tarotImg = []; 
      for (var i=1;i<=6;i++) { 
      $scope.tarotImg.push(i); 
     } 

     $scope.randTarotImg = $scope.tarotImg[Math.floor(Math.random() * $scope.tarotImg.length)]; 

     $scope.onClick = function() { 
       $scope.randTarotImg = $scope.tarotImg[Math.floor(Math.random() * $scope.tarotImg.length)]; 
     }; 

}) 

    .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"); 
       }); 
      } 
     }; 
}); 

Вот 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; 
} 
+0

Вы пытаетесь изменить изображение при нажатии, и вы хотите, чтобы каждый раз изображение загружалось? –

+0

@ravishankar Да, точно. Я попробовал это с помощью кнопки, но у меня была та же проблема с директивой, не стреляющей (а также привязка, чтобы кнопка была полностью невидимой, была задача): D, поэтому я пошел с ng-click. –

+0

Добавление и удаление класса не даст вам результатов, вам нужно соблюдать временную задержку между ними. Попробуйте с 'setTimeOut()' перед добавлением класса 'ng-hide-add' –

ответ

2

В вашей директиве попробовать это:

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

Надеюсь, это поможет.

+0

Спасибо, хорошая попытка, к сожалению пока не работает. Интересно, почему это не кажется очень логичным решением. –

+0

Еще раз спасибо Рави, я получил свой ответ здесь ==> http://www.bennadel.com/blog/2497-cross-fading-images-with-angularjs.htm –

+0

Спасибо, человек! Ты действительно спас мой день! – mark922

Смежные вопросы