2012-10-26 16 views
52

Ben 2 html sayfaları, sahip welcome.html ve benim angularjs uygulamasının bir parçası olarak, bir ngview nitelik ve yönlendirici sağlayıcısına aracılığıyla URL'yi dependending index.html içine "takılı" her ikisi de login.html.angularjs - Animate ng görüş geçişleri

Bunun bir örneği, numaralı telefonun arkasındaki the AngularJS home page adresinde bulunabilir.

Sorum: welcome.html ve login.html arasındaki geçişi hareketlendirmek için bir yolu var mı?

+0

Bkz açısal görünüm geçiş ücretsiz bir kaynak http://stackoverflow.com/questions/11786764/track-to-see-when-a-view-changes-in- vardır bazı fikirler için angularjs s. –

cevap

69

Angularjs 1.1.4 has now introduced the ng-animate directive to help animating different elements, in particular ng-view.

You can also watch the video about this new featue

GÜNCELLEME, yolu animasyonlar çalışma bunun çoğu şimdi ile kontrol edilir, büyük ölçüde değişti CSS, javascript geri aramalarını kurmak zorunda kalmadan, vs .. updated tutorial on Year Of Moo'u kontrol edebilirsiniz. @ dfsq bir nice set of examples yorumunda dikkat çekti.

+0

download özgür olabilir. Tahmin ediyorum, 3 Nisan yayınlanma tarihini kaçırdılar mı? –

+0

[burada] (http://code.angularjs.org/1.1.4/), sanırım sitelerini güncellemeyi unuttular, ancak üst menü çubuğundaki indirme bağlantısına giderseniz, onu bulabilirsiniz. . – Mortimer

+0

anladım, teşekkürler! –

5

Doğrudan AngularJS ile yapmanın bir yolu olduğundan emin değilim, ancak ekranı hem hoşgeldin hem de giriş için hiçbiri olarak ayarlayamaz ve yüklendikten sonra bir yönerge ile opaklığı canlandırabilirsiniz.

Bunu bir şekilde yapardım. 2 İçeriği soldurmak ve bir link tıklandığında ortadan kaldırmak için direktifler. fadeouts için yönerge sadece eşsiz bir kimliğe sahip öğeyi canlandırmak veya kısılması

Template yayınlayan bir hizmet diyebiliriz:

<div class="tmplWrapper" onLoadFadeIn> 
    <a href="somewhere/else" fadeOut> 
</div> 

Direktifleri:

angular 
    .directive('onLoadFadeIn', ['Fading', function('Fading') { 
    return function(scope, element, attrs) { 
     $(element).animate(...); 
     scope.$on('fading', function() { 
    $(element).animate(...); 
     }); 
    } 
    }]) 
    .directive('fadeOut', function() { 
    return function(scope, element, attrs) { 
     element.bind('fadeOut', function(e) { 
    Fading.fadeOut(e.target); 
    }); 
    } 
    }); 

Hizmeti:

angular.factory('Fading', function() { 
    var news; 
    news.setActiveUnit = function() { 
    $rootScope.$broadcast('fadeOut'); 
    }; 
    return news; 
}) 

Sadece bu kodu çabucak bir araya getirdim bu yüzden bazı hatalar olabilir :)

+0

Cevabınızı 'ng-view' ve html sayfaları arasındaki geçişi kullanmaya uygun hale getirebilir misiniz? Teşekkürler! – Greg

+0

@Greg Ben ng-view doğru terbiye ederek ne demek istediğini hiçbir fikrim yok. Bence görüş açısı geçiş yapamaz. Emin değilim ama ng-view direktifini geliştirebilir veya yukarıda gösterildiği gibi kendi yardımcı direktiflerinizi oluşturabilirsiniz. Eğer şimdi yüklüyorsanız, onLoadFadeIn yönergesi html'nizde soluklaşabilir ve bir linke tıkladıktan sonra soluklaşacaktır. Daha fazla ihtiyacın var mı? –

+0

Evet, bence ng-view direktifini doğrudan ona dahil etmeyi tercih ediyorum. Zaman ayırdığın için teşekkürler. – Greg

16

Kontrol Bu kod:

JavaScript:

app.config(["$routeProvider"], function($routeProvider){ 
    $routeProvider.when("/part1", {"templateUrl" : "part1"}); 
    $routeProvider.when("/part2", {"templateUrl" : "part2"}); 
    $routeProvider.otherwise({"redirectTo":"/part1"}); 
    }] 
); 

function HomeFragmentController($scope) { 
    $scope.$on("$routeChangeSuccess", function (scope, next, current) { 
     $scope.transitionState = "active" 
    }); 
} 

CSS:

.fragmentWrapper { 
    overflow: hidden; 
} 

.fragment { 
    position: relative; 
    -moz-transition-property: left; 
    -o-transition-property: left; 
    -webkit-transition-property: left; 
    transition-property: left; 
    -moz-transition-duration: 0.1s; 
    -o-transition-duration: 0.1s; 
    -webkit-transition-duration: 0.1s; 
    transition-duration: 0.1s 
} 

.fragment:not(.active) { 
    left: 540px; 
} 

.fragment.active { 
    left: 0px; 
} 

Ana sayfa HTML:

<div class="fragmentWrapper" data-ng-view data-ng-controller="HomeFragmentController"> 
</div> 

Partials HTML örneği: angularjs 1.2 itibariyle

<div id="part1" class="fragment {{transitionState}}"> 
</div> 
+1

bu oldukça iyi. Sadece bir sorun: Bir önceki görünüm bu görünmeden önce kaybolur, bu yüzden önceki görünüme gerçekten geçiş yapmaz. http://www.artcopycode.com/ adresinde, yönlendirme için görünüm kullanmıyorlar, ancak başlangıçtan yüklenen her parça için yönergeler var. – Mortimer

+0

@Mortimer artcopycode.com konudan tamamen farklı bir şey yapıyor, yürütmek çok daha kolay. – mystrdat

+0

bu benim için önemli olan, konuyla ilgili ne istediklerini yapıyorlar: tek bir sayfa uygulamasında farklı fragmanlar eklemek ve parçaların değişimini canlandırmak. Ancak görünüm arasında bir ng görünümü ve animasyon kullanmak yerine (yeni görünüm, yeni görünüm gelmeden önce DOM'dan kaldırılırken kolay değildir) yönergelere (denetleyicileri ve şablonları tutmak için) yönergelerini kullanır. Şu an için – Mortimer