2015-05-12 30 views
2

有沒有辦法讓一個div淡入淡出使用AngularJs ng-hide?目前,我正在獲取「菜單」以顯示何時將鼠標懸停在標題div上。從頭部移動到菜單本身時,我也得到了div。然而,我似乎找不到一種方法讓它淡入淡出使用Angular或CSS。你可以使用angularJs ng-hide製作div淡入和淡出嗎?

繼承人JSFiddle

HTML:

<div ng-app> 
    <div ng-controller="showCrtl"> 
     <div class="top" ng-mouseover="menu()" ng-mouseout="menu()">Mouse over me</div> 
     <div ng-hide="bottom" ng-mouseover="menu()" ng-mouseout="menu()" class="bottom"></div> 
    </div> 
</div> 

JS:

function showCrtl($scope){ 
    $scope.bottom = true; 

     $scope.menu = function() { 
     if($scope.bottom) { 
      $scope.bottom = false; 
     } 

     else { 
      $scope.bottom = true; 
     } 
    }; 
} 

回答

1

我把米奇的解決方案,並做了一些調整。請參閱jsfiddle

angular.module("myapp", ["ngAnimate"]) 

.controller("showCrtl", function ($scope, $timeout) { 
$scope.bottom = true; 
var inside = { 
    top: false, 
    bottom: false 
}; 

$scope.enterMenu = function (element) { 
    inside[element] = true; 

    if (inside.top === false || inside.bottom === false) { 
     $scope.bottom = false; 
    } 
    printObjects('entering ' + element); 
}; 
$scope.exitMenu = function (element, e) { 
    inside[element] = false; 
    $timeout(function() { 
     if (inside.top === false && inside.bottom === false) { 
      $scope.bottom = true; 
     } 
    }, 100); 
    printObjects('exiting ' + element); 
}; 
var printObjects = function (from) { 
    console.log('from: ',from,'\nshouldHide: ', $scope.bottom, '\ninside top: ', inside.top, '\ninside bottom: ', inside.bottom); 
}; 

});

基本上,我讓它跟蹤遊標是否位於每個元素的內部,然後在決定是否切換顯示變量之前放置一個.1秒的超時值。

+0

這個更平滑,它不會被我的鏈接重置「底部」div。:D –

2

在這裏你去:http://jsfiddle.net/Lckf7kgm/4/ 您需要的NG-動畫模塊。

<div ng-app="myapp"> 
    <div ng-controller="showCrtl"> 
     <div class="top" ng-mouseover="menu()" ng-mouseout="menu()">Mouse over me</div> 
     <div ng-hide="bottom" ng-mouseover="menu()" ng-mouseout="menu()" class="bottom"></div> 
    </div> 
</div> 

HTML

.top { 
    background-color: blue; 
    width: 100%; 
    height: 150px; 
} 
.bottom { 
    background-color: red; 
    width: 50%; 
    margin-left: 25%; 
    height: 300px; 
} 
.bottom { 
    -webkit-transition: all 2s ease; 
    /* Safari */ 
    transition: all 2s ease; 
} 
.bottom.ng-hide { 
    opacity:0; 
} 

JS

angular.module("myapp", ["ngAnimate"]) 

.controller("showCrtl", function ($scope) { 
    $scope.bottom = true; 

    $scope.menu = function() { 
     if ($scope.bottom) { 
      $scope.bottom = false; 
     } else { 
      $scope.bottom = true; 
     } 
    }; 
}); 
+0

比我更接近我自己!任何方式來使它,所以它不會重置動畫,當你從藍框到紅框? –

+1

那麼這是很難在你當前的設置,因爲你爲兩個div啓用相同的功能,但你可以去這樣的http://jsfiddle.net/2jRC8/。此解決方案將允許您檢測鼠標位置在哪裏,並且有一個額外的if語句可以防止動畫重置。 – Michelangelo

+0

找到了一個工作....把一個空白div「之間」兩個div的你認爲呢? http://jsfiddle.net/Lckf7kgm/5/ –