这是您在自定义情况下可以做到的方式。
<ion-content on-scroll="scrollEvent()" delegate-handle="scrollHandle">
将滚动事件设置为离子内容,然后在您的控制器中。
$scope.scrollEvent = function() {
$scope.scrollamount = $ionicScrollDelegate.$getByHandle('scrollHandle').getScrollPosition().top;
if ($scope.scrollamount > 180) {
$scope.$apply(function() {
$scope.hideNavigation = true;
});
} else {
$scope.$apply(function() {
$scope.hideNavigation = false;
});
}
};
如果您有简单的导航栏并且可以将其全部隐藏,只需使用“$ionicNavBarDelegate.showBar(false);”而不是 $scope.hideNavgiation 以及与该变量相关的所有内容。示例:
$scope.scrollEvent = function() {
var scrollamount = $ionicScrollDelegate.$getByHandle('scrollHandle').getScrollPosition().top;
if (scrollamount > 0) { // Would hide nav-bar immediately when scrolled and show it only when all the way at top. You can fiddle with it to find the best solution for you
$ionicNavBarDelegate.showBar(false);
} else {
$ionicNavBarDelegate.showBar(true);
}
}
$scope.scrollamount 只是隐藏导航栏的像素值,在这种情况下,当用户从顶部滚动 180 像素时。但在此之后,您只需要添加 ng-if="!hideNavigation" 或 ng-show="!hideNavigation"。
您还可以在作用域被销毁或 ionicview.leave 等时将 $scope.scrollamount 设置为零/null。
如果您的导航栏与您的模板不在同一个模板和/或控制器中,那么您可以
$scope.scrollEvent = function() {
$scope.scrollamount = $ionicScrollDelegate.$getByHandle('scrollHandle').getScrollPosition().top;
if ($scope.scrollamount > 180) {
$scope.$apply(function() {
$rootScope.$broadcast('showHideNavigation', { hide: true });
});
} else {
$scope.$apply(function() {
$rootScope.$broadcast('showHideNavigation', { hide: false });
});
}
};
并在您的其他控制器中捕获它
$scope.$on('showHideNavigation', function(event, args) {
$scope.hideNavigation = args.hide;
});
希望这对您有所帮助。