|
153 | 153 | var expand = element.resizeSensor.childNodes[0];
|
154 | 154 | var expandChild = expand.childNodes[0];
|
155 | 155 | var shrink = element.resizeSensor.childNodes[1];
|
156 |
| - var dirty, rafId, newWidth, newHeight; |
| 156 | + var dirty, rafId; |
157 | 157 | var size = getElementSize(element);
|
158 | 158 | var lastWidth = size.width;
|
159 | 159 | var lastHeight = size.height;
|
160 |
| - var initialHiddenCheck = true, resetRAF_id; |
161 |
| - |
162 |
| - var reset = function() { |
163 |
| - //set display to block, necessary otherwise hidden elements won't ever work |
164 |
| - var invisible = element.offsetWidth === 0 && element.offsetHeight === 0; |
165 |
| - |
166 |
| - if (invisible) { |
167 |
| - var saveDisplay = element.style.display; |
168 |
| - element.style.display = 'block'; |
169 |
| - } |
| 160 | + var initialHiddenCheck = true; |
| 161 | + var lastAnimationFrame = 0; |
170 | 162 |
|
| 163 | + var resetExpandShrink = function () { |
171 | 164 | expandChild.style.width = '100000px';
|
172 | 165 | expandChild.style.height = '100000px';
|
173 | 166 |
|
|
176 | 169 |
|
177 | 170 | shrink.scrollLeft = 100000;
|
178 | 171 | shrink.scrollTop = 100000;
|
| 172 | + }; |
179 | 173 |
|
180 |
| - if (invisible) { |
181 |
| - element.style.display = saveDisplay; |
| 174 | + var reset = function() { |
| 175 | + // Check if element is hidden |
| 176 | + if (initialHiddenCheck) { |
| 177 | + var invisible = element.offsetWidth === 0 && element.offsetHeight === 0; |
| 178 | + if (invisible) { |
| 179 | + // Check in next frame |
| 180 | + if (!lastAnimationFrame){ |
| 181 | + lastAnimationFrame = requestAnimationFrame(function(){ |
| 182 | + lastAnimationFrame = 0; |
| 183 | + |
| 184 | + reset(); |
| 185 | + }); |
| 186 | + } |
| 187 | + |
| 188 | + return; |
| 189 | + } else { |
| 190 | + // Stop checking |
| 191 | + initialHiddenCheck = false; |
| 192 | + } |
182 | 193 | }
|
| 194 | + |
| 195 | + resetExpandShrink(); |
183 | 196 | };
|
184 | 197 | element.resizeSensor.resetSensor = reset;
|
185 | 198 |
|
|
188 | 201 |
|
189 | 202 | if (!dirty) return;
|
190 | 203 |
|
191 |
| - lastWidth = newWidth; |
192 |
| - lastHeight = newHeight; |
| 204 | + lastWidth = size.width; |
| 205 | + lastHeight = size.height; |
193 | 206 |
|
194 | 207 | if (element.resizedAttached) {
|
195 | 208 | element.resizedAttached.call(size);
|
196 | 209 | }
|
197 | 210 | };
|
198 | 211 |
|
199 | 212 | var onScroll = function() {
|
200 |
| - var size = getElementSize(element); |
201 |
| - var newWidth = size.width; |
202 |
| - var newHeight = size.height; |
203 |
| - dirty = newWidth !== lastWidth || newHeight !== lastHeight; |
| 213 | + size = getElementSize(element); |
| 214 | + dirty = size.width !== lastWidth || size.height !== lastHeight; |
204 | 215 |
|
205 | 216 | if (dirty && !rafId) {
|
206 | 217 | rafId = requestAnimationFrame(onResized);
|
|
0 commit comments