gpt4 book ai didi

javascript - Angular 动画 View 转换取决于起点和终点

转载 作者:行者123 更新时间:2023-12-04 19:49:16 24 4
gpt4 key购买 nike

我是 Angular 动画的新手,我在使用动画转换路线 View 时遇到了问题。

我正在使用 ng-route 和 ng-animate。

假设我有三个 View :page1.html、page2.html 和 page3.html,它们显示在我的索引文件中,并根据 url(/page1、/page2 和/page3)使用 ng-view。

现在,如果当前 url 是/page1(并且显示了 page1.html),我知道如何使用 ng-enter 和 ng-leave 添加 CSS 类,使页面之间的过渡效果很好。我遇到的问题是如何处理不同状态下的不同动画。

例如,如果我添加所有 CSS 规则,使 page1 在离开 url/page1 时从左侧滑出,而 page2 在输入 url/page2 时从右侧滑入,一切都很好。但是,如果我希望 page1 -> page3 之间的过渡是 page1 向下滑动而 page3 从顶部向下滑动怎么办?

这是我想要的:

  • page1 -> page2(左滑效果)
  • page2 -> page1(向右滑动效果)
  • page1 -> page3(下滑效果)
  • page3 -> page1(上滑效果)
  • page2 -> page3(淡入淡出)
  • page3 -> page2(淡入淡出)

如您所见,我的动画取决于源和目标 url/页面,而不仅仅是页面是进入还是离开。有什么办法可以实现吗?

谢谢

最佳答案

TL;DR:检查这个 plunkr。 http://plnkr.co/edit/sIWfBnHww9EVi9TuphTv

使用 ngRoute 理论...

我这样做的方法是在 body 标签中添加一个 state 属性。为此,您需要使 $route 可用

angular.module('myapp', [])
.run(function($rootScope, $location){
$rootScope.$route = $location;
})

.controller('MyCtrl', function($rootScope, $location){
$rootScope.previousLocation;
$rootScope.newLocation;
$rootScope.$on('$routeChangeStart', function(){
$rootScope.previousLocation = $location.path();
})
$rootScope.$on('$routeChangeSuccess', function(){
$rootScope.newLocation = $location.path();
})
})

然后在您的 HTML 中:

<body ng-controller="MyCtrl" new-location="{{ newLocation }}">

然而,这很糟糕,因为您的动画 CSS 选择器类似于 [new-location*="Books/view"] .ng-enter-active{}

使用更高级的 ui.router

我建议使用 ui-router 来管理您的状态,使这更容易一些。由于所有状态都已命名,您可以附加当前状态:

angular.module('myapp', [])
.run(function($rootScope, $state){
$rootScope.$state = $state;
})

<body state="{{ $state.current.name }}">

在这种情况下,您要设置动画的 CSS 选择器应该是这样的:

body[state="books.view"] [ui-view].ng-enter{}

抱歉...这有点胡言乱语。有关工作示例,请参阅 plunkr。

... 看到这个 PLUNKR http://plnkr.co/edit/sIWfBnHww9EVi9TuphTv

关于javascript - Angular 动画 View 转换取决于起点和终点,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25975754/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com