2012-06-02 6 views
39

メテオールはどのようにライブ変更を処理しますか?たとえば、私は瞬間的な変更を望んでいませんが、何らかの種類のアニメーションが必要です。 CSSのアニメーション/トランジションを使用してアイテムを変更した場合、これは機能しますか?古いブラウザのjQueryアニメーションはどうですか?流星ライブの変化にアニメーションを付けることはできますか?

<template name="foo"> 
    ..content.. 
    {{bar}} 
</template> 

この場合、流星は、このテンプレートがレンダリングされるTemplate.foo.bar毎回呼び出します。

+1

1は、面白い、これはおそらくウィ実装の変更が必要です。 –

答えて

11

流星のある単純なアニメーションの実例です。

ここでは、アイテムのリストがあります。ユーザーがこれらのアイテムのいずれかをクリックすると、そのアイテムは20ピクセル左に移動します。

JS

//myItem 
Template.myItem.rendered = function(){ 
    var instance = this; 
    if(Session.get("selected_item") === this.data._id){ 
    Meteor.defer(function() { 
     $(instance.firstNode).addClass("selected"); //use "instance" instead of "this" 
    }); 
    } 
}; 

Template.myItem.events({ 
    "click .myItem": function(evt, template){ 
    Session.set("selected_item", this._id); 
    } 
}); 


//myItemList 
Template.myItemList.helpers({ 
    items: function(){ 
    return Items.find(); 
    } 
}); 

テンプレート

<template name="myItem"> 
    <div class="myItem">{{name}}</div> 
</template> 

<template name="myItemList"> 
    {{#each items}} 
    {{> myItem}} 
    {{/each}} 
</template> 

CSS

.myItem { transition: all 200ms 0ms ease-in; } 
.selected { left: -20px; } 

代わりの空想CSSを使用して、あなたはまた、jQueryを使ってアニメーション化することができます

Template.myItem.rendered = function(){ 
    if(Session.get("selected_item") === this.data._id){ 
    $(this.firstNode).animate({ 
     left: "-20px" 
    }, 300); 
    } 
}; 

しかし、あなたはCSSコードを削除する必要があります。 CSSトランジションのために

.myItem { transition: all 200ms 0ms ease-in; } 
.selected { left: -20px; } 

+0

ありがとう、これは私を助けた。注: '(Session.get(" selected_item ")=== this.data._id)'私のために働かなかった。 '$ '' Session.get(" selected_item "))。addClass(" selected ")'このように、 'rendered'関数を修正しなければなりませんでした。 –

+0

@TimBartschドキュメントから 'Meteor.defer()'が見つかりません。それは何をするためのものか? –

5

このような回避策があります。したがって、この関数内では、JqueryやCSS3のアニメーションをすべて行うことができます(たとえば、テンプレートdivにクラスを追加するなど)。

+10

ここの例は素晴らしかったでしょう。 ( "有用な質問"のアップボントが "答えは有用"よりもはるかに多いことに注意してください)。たぶんあなたはあなたの答えを更新できますか? –

関連する問題