Browse Source

Improve popup animation

When going back wait for the popup transition to end before removing
the DOM element.
Maxime Quandalle 10 năm trước cách đây
mục cha
commit
6ef9c7e95f

+ 24 - 0
client/components/main/popup.js

@@ -1,3 +1,12 @@
+// XXX This event list should be abstracted somewhere else.
+var endTransitionEvents = [
+  'webkitTransitionEnd',
+  'otransitionend',
+  'oTransitionEnd',
+  'msTransitionEnd',
+  'transitionend'
+].join(' ');
+
 Popup.template.events({
   click: function(evt) {
     if (evt.originalEvent) {
@@ -14,3 +23,18 @@ Popup.template.events({
     this.__afterConfirmAction.call(this);
   }
 });
+
+// When a popup content is removed (ie, when the user press the "back" button),
+// we need to wait for the container translation to end before removing the
+// actual DOM element. For that purpose we use the undocumented `_uihooks` API.
+Popup.template.onRendered(function() {
+  var container = this.find('.content-container');
+  container._uihooks = {
+    removeElement: function(node) {
+      $(node).addClass('no-height');
+      $(container).one(endTransitionEvents, function() {
+        node.parentNode.removeChild(node);
+      });
+    }
+  };
+});

+ 2 - 2
client/components/main/popup.styl

@@ -95,7 +95,7 @@
     width: 100%
 
   .content-container
-    width: 1000px
+    width: 5000px
     max-height: 550px
     transition: transform 0.2s
 
@@ -104,7 +104,7 @@
       padding: 0 10px 10px
       float: left
 
-      &.is-hidden
+      &.no-height
         height: 0
 
   .quiet

+ 1 - 1
client/components/main/popup.tpl.jade

@@ -17,5 +17,5 @@
         //-
           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}}")
+        .content(class="{{#unless $eq popupName ../popupName}}no-height{{/unless}}")
           +Template.dynamic(template=popupName data=dataContext)