Animate popup screens transition

This commit is contained in:
Maxime Quandalle 2015-05-22 19:40:12 +02:00
parent 790a0e0a2d
commit 6fe08cd4b3
4 changed files with 46 additions and 16 deletions

View file

@ -7,7 +7,7 @@ Popup.template.events({
'click .js-back-view': function() {
Popup.back();
},
'click .js-close-popover': function() {
'click .js-close-pop-over': function() {
Popup.close();
},
'click .js-confirm': function() {

View file

@ -73,8 +73,17 @@
color: darken(white, 80%)
.back-btn
padding: 10px
float: left
overflow: hidden
width: 30px
transition: width 0.2s
i.fa
margin: 10px
margin-top: 12px
&.is-hidden
width: 0
.close-btn
padding: 10px 10px 10px 4px
@ -82,11 +91,21 @@
top: 0
right: 0
.content
overflow-x: hidden
overflow-y: auto
padding: 0 10px 10px
.content-wrapper
width: 100%
.content-container
width: 1000px
max-height: 550px
transition: transform 0.2s
.content
width: 300 - 20px
padding: 0 10px 10px
float: left
&.is-hidden
height: 0
.quiet
padding: 6px 6px 4px

View file

@ -3,11 +3,19 @@
class=currentBoard.colorClass
style="display:block; left:{{offset.left}}px; top:{{offset.top}}px;")
.header.clearfix
if hasPopupParent
a.back-btn.js-back-view
i.fa.fa-chevron-left
a.back-btn.js-back-view(class="{{#unless hasPopupParent}}is-hidden{{/unless}}")
i.fa.fa-chevron-left
span.header-title= title
a.close-btn.js-close-popover
a.close-btn.js-close-pop-over
i.fa.fa-times
.content.clearfix
+Template.dynamic(template=popupName data=dataContext)
.content-wrapper
//-
We display the all stack of popup content next to each other and move
the "window" by translating .content-container inside .content-wrapper.
.content-container(style="transform:translateX({{containerTranslation}}px)")
each stack
//-
XXX We need a better way to express the "is the last element" condition.
Hopefully the @last helper will come soon (or at least @index)
.content(class="{{#unless $eq popupName ../popupName}}is-hidden{{/unless}}")
+Template.dynamic(template=popupName data=dataContext)

View file

@ -56,9 +56,9 @@ Popup = {
// If there are no popup currently opened we use the Blaze API to render
// one into the DOM. We use a reactive function as the data parameter that
// just return the top element on the stack and depends on our internal
// dependency that is being invalidated every time the top element of the
// stack has changed and we want to update the popup.
// return the the complete along with its top element and depends on our
// internal dependency that is being invalidated every time the top
// element of the stack has changed and we want to update the popup.
//
// Otherwise if there is already a popup open we just need to invalidate
// our internal dependency, and since we just changed the top element of
@ -66,7 +66,10 @@ Popup = {
if (! self.isOpen()) {
self.current = Blaze.renderWithData(self.template, function() {
self._dep.depend();
return self._stack[self._stack.length - 1];
return _.extend(self._stack[self._stack.length - 1], {
stack: self._stack,
containerTranslation: (self._stack.length - 1) * -300
});
}, document.body);
} else {