javascript - AngularJS - 使用 TweenMax 进行位置感知 ng-view 导航

标签 javascript json angularjs ng-animate ng-view

我对 AngularJS 完全是菜鸟,并且已经开始构建我的第一个项目,并且每一步都遇到了障碍......

我正在尝试构建一些非常简单的东西,这是我想要实现的目标的要点:

  • 我有 5 个页面/ View ,这些页面/ View 是根据本文使用 JSON 数据拉入和创建的 - blog.brunscopelliti.com/how-to-defer-route-definition-in-an-angularjs-web-应用程序。它被连接到工厂。获取JSON()

    function($route, $location, $http, $q) {
    
    var jsonLoaded = {}; 
    
    jsonLoaded.getJSON = function() {
    
        var deferred = $q.defer();
        $http.get('pages.json').success(function(data) {
            deferred.resolve(data);
        }).error(function() {
            deferred.reject();
        });
        return deferred.promise;
    }
    return jsonLoaded;      
    
  • 在 View 中导航时,我希望有分层轮播过渡效果。 即,如果您在索引 0 上,单击索引 1,将从右向左导航,然后单击索引 0 将从左向右导航 View ,等等。这是在我的 plunks 中的 animate.js 文件中进行条件化的,使用hasClass()。

我尝试了 3 个主要选项和单独的 plunks:

选项 1 使用 ng-click 添加类 - http://plnkr.co/edit/0mrebo8BMlrz1YkttxsT?p=preview

$scope.navDirection = function(pageClass) {
    $scope.pageTransClass = pageClass;
};
  • 这会产生最佳结果,并且完全按照我想要的方式导航,问题是当单击浏览器后退或前进按钮时,类保持不变,这也是预期的。

  • 添加/更改进入和离开 View 的类。

选项 2 使用 $routeProvider 解析 - http://plnkr.co/edit/SPfgKUyYt7LMQITHzj2I?p=preview

resolve: {
   direction: ["changePageDirection",
       function(changePageDirection) {
           return changePageDirection.direction($route.current.params.pageId, $routeParams.pageId);
       }
   ]
}
  • 这会在添加类时产生延迟,即仅在第三次导航项点击时才真正开始工作。

  • 此方法接缝将类添加/更改为“进入”动画,但“离开”仍然保留旧类。

选项 3 使用 Observe - http://plnkr.co/edit/TwtkGrY1Ww4uYY8n2LO5?p=preview

return function(scope, element, attrs) {

    attrs.$observe("pageDirectionObs", function (value) {
        if (value) {
            element.addClass(value);
        }
    });
};
  • 这与选项 2 一样,仅在第三次点击时才真正开始起作用。

  • 此方法接缝添加/更改“进入”动画的类,但“离开”仍然保留旧的类。

我开始认为我的主要问题要么是理解(或缺乏)$scope 以及 AngularJS 编译所有内容的方式。

我已经这样做了几个星期了,但距离我需要达到的目标还差得远。任何帮助将不胜感激。

提前致谢。

更新:

  • 这是使用 ui-view 和 ui-view-extras 的第四个示例

  • 这是 plunk - embed.plnkr.co/vjSBLzMMKIrkHD7sOctN/preview

最佳答案

我的解决方案实际上相当简单。我没有更改每个方向的类,而是将一个变量附加到 $rootScope,该变量在任何页面转换之前进行更改,并基于 $rootScope 变量而不是类来生成动画。

关于javascript - AngularJS - 使用 TweenMax 进行位置感知 ng-view 导航,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26713196/

相关文章:

javascript - Cordova:如何更改 HTML 源目录?

java - 在更新字段之前等待 JSON 响应完成

javascript - 类型错误:无法读取 null 的属性 '0'

Javascript Proxy set() 继承对象的局部属性

javascript 拖放 - 防止元素放入另一个可放置元素中

json - SwiftUI - 类型 'Service' 不符合协议(protocol) 'Decodable'

javascript - Json parse() 在 javascript 中不会转义\"

c# - Angular 在 ASP.NET MVC 之上,显示错误

javascript - 如何让 AngularJS 更新 ng-repeat 数组拼接上的 DOM? $scope.$apply() 返回错误

javascript - 使用 nuxt.js 时如何获取 vee-validator 的 $validator