2016-04-21 7 views
1

Я действительно ищу хороший способ играть в анимацию в контексте моего приложения с помощью Blaze.Работа со сложными анимациями на Blaze

Если быть более точным, я написал это супер простой пример:

<template name="global"> 
    <h1>Hi guys!</h1> 
    {{> foo}} 
</template> 

<template name="foo"> 
    <h2>I'm a foo!</h2> 
    <ul> 
    {{#each elements}} 
     {{> bar}} 
    }} 
    </ul> 

    <button name="btnAdd">Add new elem</button> 
    <button name="btnDel">Delete an elem</button> 
</template> 

<template name="bar"> 
    <li>{{name}}</li> 
</template> 

Давайте предположим, что мы получили Iron-маршрутизатор маршрут, придающие global шаблона. В этом конкретном рендере (от «navigate») Я хочу, чтобы каждый шаблон отображался с помощью fadeIn.

При нажатии на кнопку btnAdd создается новый элемент. Хотел бы это сделать с эффектом SlideInLeft.

При нажатии на кнопку btnDel элемент удаляется. Я бы хотел, чтобы он был разрушен с эффектом SlideOutRight.

Когда пользователь переходит к другому маршруту, я хочу, чтобы все шаблоны исчезли с эффектом fadeOut.

Каждая из моих попыток до сих пор не позволяла мне делать такое различие ... Я не мог найти пакет, разрешающий эту проблему.

Я на самом деле просто играть анимацию путем добавления/удаление Animate.css класса (очень простого в использовании и красивая!)

Чтобы возобновить, я хочу другую анимация играла в зависимости от источника рендеринг.

Неужели кто-то уже сталкивался с этой проблемой?

БОНУС ВОПРОС: Вы знаете, как цепь анимации, как:

визуализации с глобальным FadeIn Effect >> затем >> визуализации Foo с rotateIn Effect >> затем >> оказывать всяческое бар с bounceIn эффектом

+0

Вы уже это видели? https://github.com/webtempest/meteor-animate – Kalman

+0

@Kalman: Да, это не решает проблему, это не позволяет выбирать анимацию в другом контексте, она будет воспроизводиться каждый раз, когда привязанный элемент отображается –

ответ

2

Для выбора времени вы можете использовать Meteor.setInterval. Например, вы можете сделать $('.elementClass').hide('fast') за пределами setInterval. Он будет работать первым, и setInterval будет запускаться, когда вы этого захотите.

Для начальных эффектов, вы можете использовать:

Template.templateName.onRendered(function(){ 
    $('.elementClass').fadeIn('fast') //note that element is initially hidden (display:none in CSS). you can use effects from jquery and jquery-ui for more effects. You have to add jquery-ui additionally 
}) 

Вы также можете использовать JQuery в вашем router.js, используя железо: маршрутизатор.

Router.route('/the-url', function() { 
    this.render('templateName', { 
     data: function() { 
      $('.htmlElement').toggle('slide', {direction:'right'}, 200); //note that the element is initially invisible 
     } 
    }); 
}, { 
    name: 'routeName' 
}); 
+0

Yep ответ на вопрос о бонусе (я знал, что могу сделать это с помощью setInterval, но, возможно, это можно было сделать по-другому;)). В любом случае спасибо, но это не решает основной проблемы ... –

+0

@JulienLeray Я думаю, что так и есть. Вы можете просто добавить какой-либо эффект, который вы хотите к любому элементу с помощью onRendered, или вы можете использовать jQuery в своем маршруте. Кроме того, вы можете делать любой эффект с событиями. Например, вы нажимаете, он выполняет нужный эффект, а затем удаляет ваш документ. – Luna

+0

Дайте мне знать, если вы не знаете, как его написать, и я отредактирую свой вопрос. – Luna