我是 AngularJS 的新手。我尝试从 Backbone.js 迁移到 Angular,首先我想我想做的很简单:fadeIn 和 fadeOut。
所以我的 HTML 看起来像这样:
<div id="calendar" style="padding-left: 50px" ng-controller="CalendarButtonController">
<!-- prev button -->
<div class="calendar-btn prev" ng-mouseover="fadeIn()" ng-mouseleave="fadeOut()" fade-duration="5000" fade-target="btnPrev">
<img id="btnPrev" src="img/btn-prev_hover.png">
</div>
<!-- next button -->
<div class="calendar-btn next" ng-mouseover="fadeIn()" ng-mouseleave="fadeOut()" fade-duration="5000" fade-target="btnNext">
<img id="btnNext" src="img/btn-next_hover.png">
</div>
</div>
所以思路是:如果鼠标在prev-button div上,div里面的图片会淡入。fade-target-Attribute里面是元素的具体ID,会淡入。在鼠标悬停时,元素(在fade-target-Attribute 中定义)将淡入,而在鼠标离开时,元素将淡出。所以我实现了一个控制器和一个指令:
function CalendarButtonController($scope){
$scope.fadeIn = function() {
$scope.$emit('event', 'fadeIn');
}
$scope.fadeOut = function() {
$scope.$emit('event', 'fadeOut');
}
}
angular.module('components', [])
.directive('fadeDuration', function ($rootScope) {
return {
restrict: 'A',
link: function(scope, el, attrs) {
$rootScope.$on('event', function(event, message) {
if(message == "fadeIn"){
fadeIn();
}
if(message == "fadeOut"){
fadeOut();
}
});
function fadeIn(){
$('#'+attrs.fadeTarget).fadeIn(attrs.fadeDuration);
}
function fadeOut(){
$('#'+attrs.fadeTarget).fadeOut(attrs.fadeDuration);
}
}
}
});
元素的淡入和淡出有效,但问题是:如果我将鼠标移到 prev-button-div 上,两个图像(prev-Button 和 next-Button)都会淡入。但它应该只淡入 prev 的图像-按钮。怎么可能只获取触发事件的元素的属性?指令中始终包含与指令匹配的所有元素的所有属性。
编辑:有没有更简单的方法来实现淡入淡出效果?