diff --git a/dist/ionic.css b/dist/ionic.css
index e56a5d22b6..9defdc1292 100644
--- a/dist/ionic.css
+++ b/dist/ionic.css
@@ -1436,7 +1436,6 @@ address {
.modal {
position: fixed;
z-index: 10;
- visibility: hidden;
top: 0;
width: 100%;
min-height: 100%;
@@ -1446,11 +1445,10 @@ address {
-webkit-transform: translate3d(0, 100%, 0);
transform: translate3d(0, 100%, 0); }
.modal.active {
- visibility: visible;
+ -webkit-transform: translate3d(0, 0%, 0);
+ transform: translate3d(0, 0%, 0);
opacity: 1;
- height: 100%;
- -webkit-transform: translate3d(0, 0, 0);
- transform: translate3d(0, 0, 0); }
+ height: 100%; }
.list {
margin-bottom: 20px;
@@ -2144,11 +2142,18 @@ a.button {
.slide-in-up {
-webkit-transform: translate3d(0, 100%, 0);
transform: translate3d(0, 100%, 0);
- -webkit-transition: -webkit-transform 0.25s, opacity 1ms 0.25s;
- transition: transform 0.25s, opacity 1ms 0.25s;
- -webkit-transition-timing-function: cubic-bezier(0.1, 0.5, 0.1, 1); }
-
-.slide-in-up.enter {
- -webkit-transition: -webkit-transform 0.25s;
- transition: transform 0.25s;
-webkit-transition-timing-function: cubic-bezier(0.1, 0.5, 0.1, 1); }
+ .slide-in-up.enter {
+ -webkit-transition: -webkit-transform 0.25s, opacity 1ms 0.25s;
+ transition: transform 0.25s, opacity 1ms 0.25s; }
+ .slide-in-up.enter-active {
+ -webkit-transition: -webkit-transform 0.25s;
+ transition: transform 0.25s;
+ -webkit-transform: translate3d(0, 0, 0);
+ transform: translate3d(0, 0, 0); }
+ .slide-in-up.leave {
+ -webkit-transition: -webkit-transform 0.25s, opacity 1ms 0.25s;
+ transition: transform 0.25s, opacity 1ms 0.25s; }
+ .slide-in-up.leave-active {
+ -webkit-transform: translate3d(0, 100%, 0);
+ transform: translate3d(0, 100%, 0); }
diff --git a/dist/ionic.js b/dist/ionic.js
index 72325fb5c4..2522d27517 100644
--- a/dist/ionic.js
+++ b/dist/ionic.js
@@ -1626,16 +1626,44 @@ if ( document.readyState === "complete" ) {
})(ionic = window.ionic || {});
;(function(ionic) {
ionic.Animator = {
- animate: function(element, fn) {
- var endFunc = function() {
- console.log('Animation finished for element', element);
- element.removeEventListener('webkitTransitionEnd', endFunc);
- element.removeEventListener('transitionEnd', endFunc);
- };
- element.addEventListener('webkitTransitionEnd', endFunc);
- element.addEventListener('transitionEnd', endFunc);
+ animate: function(element, className, fn) {
+ return {
+ leave: function() {
+ var endFunc = function() {
+ console.log('Animation finished for element', element);
- element.classList.add('enter');
+ element.classList.remove('leave');
+ element.classList.remove('leave-active');
+
+ element.removeEventListener('webkitTransitionEnd', endFunc);
+ element.removeEventListener('transitionEnd', endFunc);
+ };
+ element.addEventListener('webkitTransitionEnd', endFunc);
+ element.addEventListener('transitionEnd', endFunc);
+
+ element.classList.add('leave');
+ element.classList.add('leave-active');
+ return this;
+ },
+ enter: function() {
+ var endFunc = function() {
+ console.log('Animation finished for element', element);
+
+ element.classList.remove('enter');
+ element.classList.remove('enter-active');
+
+ element.removeEventListener('webkitTransitionEnd', endFunc);
+ element.removeEventListener('transitionEnd', endFunc);
+ };
+ element.addEventListener('webkitTransitionEnd', endFunc);
+ element.addEventListener('transitionEnd', endFunc);
+
+ element.classList.add('enter');
+ element.classList.add('enter-active');
+
+ return this;
+ }
+ };
}
};
})(ionic = window.ionic || {});
diff --git a/js/animate.js b/js/animate.js
index f64cc63108..c394117eb6 100644
--- a/js/animate.js
+++ b/js/animate.js
@@ -1,15 +1,43 @@
(function(ionic) {
ionic.Animator = {
- animate: function(element, fn) {
- var endFunc = function() {
- console.log('Animation finished for element', element);
- element.removeEventListener('webkitTransitionEnd', endFunc);
- element.removeEventListener('transitionEnd', endFunc);
- };
- element.addEventListener('webkitTransitionEnd', endFunc);
- element.addEventListener('transitionEnd', endFunc);
+ animate: function(element, className, fn) {
+ return {
+ leave: function() {
+ var endFunc = function() {
+ console.log('Animation finished for element', element);
- element.classList.add('enter');
+ element.classList.remove('leave');
+ element.classList.remove('leave-active');
+
+ element.removeEventListener('webkitTransitionEnd', endFunc);
+ element.removeEventListener('transitionEnd', endFunc);
+ };
+ element.addEventListener('webkitTransitionEnd', endFunc);
+ element.addEventListener('transitionEnd', endFunc);
+
+ element.classList.add('leave');
+ element.classList.add('leave-active');
+ return this;
+ },
+ enter: function() {
+ var endFunc = function() {
+ console.log('Animation finished for element', element);
+
+ element.classList.remove('enter');
+ element.classList.remove('enter-active');
+
+ element.removeEventListener('webkitTransitionEnd', endFunc);
+ element.removeEventListener('transitionEnd', endFunc);
+ };
+ element.addEventListener('webkitTransitionEnd', endFunc);
+ element.addEventListener('transitionEnd', endFunc);
+
+ element.classList.add('enter');
+ element.classList.add('enter-active');
+
+ return this;
+ }
+ };
}
};
})(ionic = window.ionic || {});
diff --git a/scss/ionic/_animations.scss b/scss/ionic/_animations.scss
index 62656ac881..779feca4c8 100644
--- a/scss/ionic/_animations.scss
+++ b/scss/ionic/_animations.scss
@@ -14,14 +14,29 @@ $bezier-function: cubic-bezier(.1, .5, .1, 1);
-webkit-transform: translate3d(0, 100%, 0);
transform: translate3d(0, 100%, 0);
- -webkit-transition: -webkit-transform .25s, opacity 1ms .25s;
- transition: transform .25s, opacity 1ms .25s;
-
-webkit-transition-timing-function: $bezier-function;
-}
-.slide-in-up.enter {
- -webkit-transition: -webkit-transform .25s;
- transition: transform .25s;
- -webkit-transition-timing-function: $bezier-function;
+ &.enter {
+
+ -webkit-transition: -webkit-transform .25s, opacity 1ms .25s;
+ transition: transform .25s, opacity 1ms .25s;
+
+ }
+
+ &.enter-active {
+ -webkit-transition: -webkit-transform .25s;
+ transition: transform .25s;
+ -webkit-transform: translate3d(0, 0, 0);
+ transform: translate3d(0, 0, 0);
+ }
+
+ &.leave {
+ -webkit-transition: -webkit-transform .25s, opacity 1ms .25s;
+ transition: transform .25s, opacity 1ms .25s;
+ }
+
+ &.leave-active {
+ -webkit-transform: translate3d(0, 100%, 0);
+ transform: translate3d(0, 100%, 0);
+ }
}
diff --git a/scss/ionic/_modal.scss b/scss/ionic/_modal.scss
index 16aa3dfafc..a6d81c33be 100644
--- a/scss/ionic/_modal.scss
+++ b/scss/ionic/_modal.scss
@@ -6,7 +6,6 @@
position: fixed;
z-index: $zindex-modal;
- visibility: hidden;
top: 0;
@@ -26,13 +25,10 @@
// Active modal
&.active {
- visibility: visible;
-
+ -webkit-transform: translate3d(0, 0%, 0);
+ transform: translate3d(0, 0%, 0);
opacity: 1;
height: 100%;
- // Put it up
- -webkit-transform: translate3d(0, 0, 0);
- transform: translate3d(0, 0, 0);
}
}
diff --git a/test/modals.html b/test/modals.html
index 81e36be0a6..25a5e1f3c7 100644
--- a/test/modals.html
+++ b/test/modals.html
@@ -38,20 +38,22 @@