我设法找到了解决方案。你可以在网上看到,或者阅读代码
基本思想是这样的:
- 后退动画是默认动画
- 每当我们想要动画前进时,这是通过一个特殊的函数来完成的,它改变容器的类名,所以使用 forwards-animation
- 一旦从 DOM 中删除旧页面,此更改就会撤消
最后一步很重要:不要使用计时器或类似的东西。当在前进动画期间按下浏览器的后退按钮时,计时器不会注意到这一点,并且类名的更改不会撤消。
但是当按下按钮时,旧页面并没有完成它的动画,它会立即从 DOM 中删除,这会触发将类名更改回来的代码。
代码中最重要的部分:
使用此函数使用前进动画更改当前页面:
function animateForwards(callback) {
$('#container').addClass("animation-forwards");
$('#container').removeClass("animation-backwards");
callback();
}
animateForwards(function () { $location.path("/newPage"); });
一旦从 DOM 中删除旧页面,此函数将撤消类名的更改:
$("#container").bind(
"DOMNodeRemoved",
function(objEvent) {
// Append event to log display.
if ($(objEvent.target).hasClass('page')) {
$('#container').removeClass("animation-forwards");
$('#container').addClass("animation-backwards");
}
}
);