Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(805)

Side by Side Diff: chrome/browser/resources/print_preview/print_preview_animations.js

Issue 565213005: Make Print Preview elements transitions smoother. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Created 6 years, 3 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
OLDNEW
1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. 1 // Copyright (c) 2012 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be 2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file. 3 // found in the LICENSE file.
4 4
5 // Counter used to give webkit animations unique names. 5 // Counter used to give webkit animations unique names.
6 var animationCounter = 0; 6 var animationCounter = 0;
7 7
8 var animationEventTracker_ = new EventTracker(); 8 var animationEventTracker_ = new EventTracker();
9 9
10 function addAnimation(code) { 10 function addAnimation(code) {
(...skipping 19 matching lines...) Expand all
30 function getFadeInAnimationCode(targetHeight) { 30 function getFadeInAnimationCode(targetHeight) {
31 return '0% { opacity: 0; height: 0; } ' + 31 return '0% { opacity: 0; height: 0; } ' +
32 '80% { opacity: 0.5; height: ' + (targetHeight + 4) + 'px; }' + 32 '80% { opacity: 0.5; height: ' + (targetHeight + 4) + 'px; }' +
33 '100% { opacity: 1; height: ' + targetHeight + 'px; }'; 33 '100% { opacity: 1; height: ' + targetHeight + 'px; }';
34 } 34 }
35 35
36 /** 36 /**
37 * Fades in an element. Used for both printing options and error messages 37 * Fades in an element. Used for both printing options and error messages
38 * appearing underneath the textfields. 38 * appearing underneath the textfields.
39 * @param {HTMLElement} el The element to be faded in. 39 * @param {HTMLElement} el The element to be faded in.
40 * @param {boolean=} opt_justShow Whether {@code el} should be shown with no
41 * animation.
40 */ 42 */
41 function fadeInElement(el) { 43 function fadeInElement(el, opt_justShow) {
42 if (el.classList.contains('visible')) 44 if (el.classList.contains('visible'))
43 return; 45 return;
44 el.classList.remove('closing'); 46 el.classList.remove('closing');
45 el.hidden = false; 47 el.hidden = false;
46 el.setAttribute('aria-hidden', 'false'); 48 el.setAttribute('aria-hidden', 'false');
47 el.style.height = 'auto'; 49 el.style.height = 'auto';
48 var height = el.offsetHeight; 50 var height = el.offsetHeight;
49 el.style.height = height + 'px'; 51 el.style.height = height + 'px';
50 var animName = addAnimation(getFadeInAnimationCode(height)); 52 if (opt_justShow) {
51 animationEventTracker_.add( 53 el.style.opacity = 1;
52 el, 'webkitAnimationEnd', onFadeInAnimationEnd.bind(el), false); 54 } else {
53 el.style.webkitAnimationName = animName; 55 var animName = addAnimation(getFadeInAnimationCode(height));
56 animationEventTracker_.add(
57 el, 'webkitAnimationEnd', onFadeInAnimationEnd.bind(el), false);
58 el.style.webkitAnimationName = animName;
59 }
54 el.classList.add('visible'); 60 el.classList.add('visible');
55 } 61 }
56 62
57 /** 63 /**
58 * Fades out an element. Used for both printing options and error messages 64 * Fades out an element. Used for both printing options and error messages
59 * appearing underneath the textfields. 65 * appearing underneath the textfields.
60 * @param {HTMLElement} el The element to be faded out. 66 * @param {HTMLElement} el The element to be faded out.
61 */ 67 */
62 function fadeOutElement(el) { 68 function fadeOutElement(el) {
63 if (!el.classList.contains('visible')) 69 if (!el.classList.contains('visible'))
(...skipping 42 matching lines...) Expand 10 before | Expand all | Expand 10 after
106 if (animEl) 112 if (animEl)
107 animEl.parentNode.removeChild(animEl); 113 animEl.parentNode.removeChild(animEl);
108 element.style.webkitAnimationName = ''; 114 element.style.webkitAnimationName = '';
109 animationEventTracker_.remove(element, 'webkitAnimationEnd'); 115 animationEventTracker_.remove(element, 'webkitAnimationEnd');
110 } 116 }
111 } 117 }
112 118
113 /** 119 /**
114 * Fades in a printing option existing under |el|. 120 * Fades in a printing option existing under |el|.
115 * @param {HTMLElement} el The element to hide. 121 * @param {HTMLElement} el The element to hide.
122 * @param {boolean=} opt_justShow Whether {@code el} should be hidden with no
123 * animation.
116 */ 124 */
117 function fadeInOption(el) { 125 function fadeInOption(el, opt_justShow) {
118 if (el.classList.contains('visible')) 126 if (el.classList.contains('visible'))
119 return; 127 return;
120 // To make the option visible during the first fade in. 128 // To make the option visible during the first fade in.
121 el.hidden = false; 129 el.hidden = false;
122 130
123 wrapContentsInDiv(el.querySelector('h1'), ['invisible']); 131 var leftColumn = el.querySelector('.left-column');
132 wrapContentsInDiv(leftColumn, ['invisible']);
124 var rightColumn = el.querySelector('.right-column'); 133 var rightColumn = el.querySelector('.right-column');
125 wrapContentsInDiv(rightColumn, ['invisible']); 134 wrapContentsInDiv(rightColumn, ['invisible']);
126 135
127 var toAnimate = el.querySelectorAll('.collapsible'); 136 var toAnimate = el.querySelectorAll('.collapsible');
128 for (var i = 0; i < toAnimate.length; i++) 137 for (var i = 0; i < toAnimate.length; i++)
129 fadeInElement(toAnimate[i]); 138 fadeInElement(toAnimate[i], opt_justShow);
130 el.classList.add('visible'); 139 el.classList.add('visible');
131 } 140 }
132 141
133 /** 142 /**
134 * Fades out a printing option existing under |el|. 143 * Fades out a printing option existing under |el|.
135 * @param {HTMLElement} el The element to hide. 144 * @param {HTMLElement} el The element to hide.
136 * @param {boolean=} opt_justHide Whether {@code el} should be hidden with no 145 * @param {boolean=} opt_justHide Whether {@code el} should be hidden with no
137 * animation. 146 * animation.
138 */ 147 */
139 function fadeOutOption(el, opt_justHide) { 148 function fadeOutOption(el, opt_justHide) {
140 if (!el.classList.contains('visible')) 149 if (!el.classList.contains('visible'))
141 return; 150 return;
142 151
143 wrapContentsInDiv(el.querySelector('h1'), ['visible']); 152 var leftColumn = el.querySelector('.left-column');
153 wrapContentsInDiv(leftColumn, ['visible']);
144 var rightColumn = el.querySelector('.right-column'); 154 var rightColumn = el.querySelector('.right-column');
145 wrapContentsInDiv(rightColumn, ['visible']); 155 wrapContentsInDiv(rightColumn, ['visible']);
146 156
147 var toAnimate = el.querySelectorAll('.collapsible'); 157 var toAnimate = el.querySelectorAll('.collapsible');
148 for (var i = 0; i < toAnimate.length; i++) { 158 for (var i = 0; i < toAnimate.length; i++) {
149 if (opt_justHide) { 159 if (opt_justHide) {
150 toAnimate[i].hidden = true; 160 toAnimate[i].hidden = true;
151 toAnimate[i].classList.add('closing'); 161 toAnimate[i].classList.add('closing');
152 toAnimate[i].classList.remove('visible'); 162 toAnimate[i].classList.remove('visible');
153 } else { 163 } else {
(...skipping 17 matching lines...) Expand all
171 while (el.childNodes.length > 0) 181 while (el.childNodes.length > 0)
172 div.appendChild(el.firstChild); 182 div.appendChild(el.firstChild);
173 el.appendChild(div); 183 el.appendChild(div);
174 } 184 }
175 185
176 div.className = ''; 186 div.className = '';
177 div.classList.add('collapsible'); 187 div.classList.add('collapsible');
178 for (var i = 0; i < classes.length; i++) 188 for (var i = 0; i < classes.length; i++)
179 div.classList.add(classes[i]); 189 div.classList.add(classes[i]);
180 } 190 }
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698