【问题标题】:Ionic detect "back" for better Native Page Transitions离子检测“返回”以获得更好的原生页面转换
【发布时间】:2015-12-29 04:29:07
【问题描述】:

在阅读了来自http://www.gajotres.net/handling-native-view-animations-with-ionic-framework/ 的精彩教程后,我正在尝试在我的 Ionic 项目中实现原生页面转换。

但是,我发现有时页面转换后页面会发生变化的问题。意思是,它将动画从页面A过渡到页面A。只有这样,页面A才变成页面B。文章和插件提供的解决方案是通过估计设置动画开始前的延迟。但是这种做法不是很可靠。

所以,我正在考虑而不是使用延迟,而是在进入该页面时应用动画:

$scope.$on('$ionicView.enter', function (event, viewData) {
    window.plugins.nativepagetransitions.slide({
            "direction": "left"
        });
});

从其他页面导航到此页面时效果很好。但是从其他页面返回到这个页面时会出现动画问题。

我如何知道用户回到了这个页面,以便我可以执行不同方向的动画?

【问题讨论】:

    标签: javascript cordova ionic-framework


    【解决方案1】:

    在拦截$ionicView.enter 事件时,可以检查动画的方向。回调函数接收 2 个参数。第二个将为您提供该信息,以便您可以执行以下操作:

    $scope.$on('$ionicView.enter', function (event, viewData) {
        var transitionDirection = viewData.direction !== "back" ? "left": "right";
        window.plugins.nativepagetransitions.slide({
             "direction": transitionDirection
        });
    });
    

    第二个参数viewData有一个属性direction与动画的方向:backforward

    你可以在离开视图时做同样的事情:

    $scope.$on("$ionicView.leave", function(event, viewData){
        var transitionDirection = viewData.direction !== "back" ? "left": "right";
        window.plugins.nativepagetransitions.slide({
             "direction": transitionDirection
        });
    });
    

    还有很多其他的events 可以使用:

    • $ionicView.enter
    • $ionicView.leave
    • $ionicView.beforeEnter
    • $ionicView.beforeLeave
    • $ionicView.afterEnter
    • $ionicView.afterLeave
    • $ionicView.loaded
    • $ionicView.unloaded

    【讨论】:

    • 您的解决方案非常酷。我正在研究我的解决方案以使其正常工作。你的解决方案好多了!!!无论如何,是否有任何全局 '$ionicView.enter' 的东西,这样我就可以把它放一次,它会在每一页上工作?
    • 恐怕不行。您可以在$rootScope 中使用事件$stateChangeSuccess,但我想您必须检查哪个状态在哪里:$rootScope.$on('$stateChangeSuccess', function (event, toState, toParams, fromState, fromParams) { });
    • 非常感谢您的回复。一件事我不知道。似乎我们在“$ionicView.enter”上对其进行了动画处理,为什么有时我仍然看到同一页面正在动画中,然后页面才被更改?有什么办法可以完全避免它的发生?
    • 这个问题我恐怕不明白。我想我应该看看你是怎么做的。
    • 您可以通过在低端手机上运行 ionic 并将本机转换的 androiddelay 选项设置为 0 来更好地查看问题。当我这样做时,我将在 90% 的时间看到同一页面是过渡,然后页面才改变。这不应该发生,因为我们在$ionicView.enter 上这样做。无论如何,如果我将alert 放在$ionicView.beforeEnter 中,它会正常工作。所以,我想很可能是因为离子事件没有准确调用。使用alert 暂停脚本并使其准确。有没有像alert这样的东西可以让它准确?
    猜你喜欢
    • 2023-03-27
    • 2020-01-06
    • 1970-01-01
    • 2015-11-26
    • 1970-01-01
    • 2017-01-11
    • 2021-05-18
    • 2017-02-15
    相关资源
    最近更新 更多