|
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