Skip to content

Commit 45334e9

Browse files
committed
Reverted: #213 Use resizeobserver when available
due to incompatibility with dom elements detection
1 parent cd88cc0 commit 45334e9

File tree

3 files changed

+26
-71
lines changed

3 files changed

+26
-71
lines changed

package.json

+1-1
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
{
22
"name": "css-element-queries",
3-
"version": "1.0.3",
3+
"version": "1.0.4",
44
"description": "CSS-Element-Queries Polyfill. proof-of-concept for high-speed element dimension/media queries in valid css.",
55
"main": "index.js",
66
"directories": {

src/ElementQueries.js

+4-4
Original file line numberDiff line numberDiff line change
@@ -324,7 +324,7 @@
324324
}
325325
}
326326

327-
element.resizeSensor = new ResizeSensor(element, check);
327+
element.resizeSensorInstance = new ResizeSensor(element, check);
328328
check();
329329
}
330330

@@ -482,11 +482,11 @@
482482
delete element.elementQueriesSetupInformation;
483483
delete element.elementQueriesSensor;
484484

485-
} else if (element.resizeSensor) {
485+
} else if (element.resizeSensorInstance) {
486486
//responsive image
487487

488-
element.resizeSensor.detach();
489-
delete element.resizeSensor;
488+
element.resizeSensorInstance.detach();
489+
delete element.resizeSensorInstance;
490490
}
491491
};
492492

src/ResizeSensor.js

+21-66
Original file line numberDiff line numberDiff line change
@@ -83,9 +83,6 @@
8383
* @constructor
8484
*/
8585
var ResizeSensor = function(element, callback) {
86-
87-
var observer;
88-
8986
/**
9087
*
9188
* @constructor
@@ -156,15 +153,21 @@
156153
var expand = element.resizeSensor.childNodes[0];
157154
var expandChild = expand.childNodes[0];
158155
var shrink = element.resizeSensor.childNodes[1];
159-
160-
var dirty, rafId;
156+
var dirty, rafId, newWidth, newHeight;
161157
var size = getElementSize(element);
162158
var lastWidth = size.width;
163159
var lastHeight = size.height;
164160
var initialHiddenCheck = true, resetRAF_id;
165161

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+
}
166170

167-
var resetExpandShrink = function () {
168171
expandChild.style.width = '100000px';
169172
expandChild.style.height = '100000px';
170173

@@ -173,33 +176,10 @@
173176

174177
shrink.scrollLeft = 100000;
175178
shrink.scrollTop = 100000;
176-
};
177179

178-
var reset = function() {
179-
// Check if element is hidden
180-
if (initialHiddenCheck) {
181-
if (!expand.scrollTop && !expand.scrollLeft) {
182-
183-
// reset
184-
resetExpandShrink();
185-
186-
// Check in next frame
187-
if (!resetRAF_id){
188-
resetRAF_id = requestAnimationFrame(function(){
189-
resetRAF_id = 0;
190-
191-
reset();
192-
});
193-
}
194-
195-
return;
196-
} else {
197-
// Stop checking
198-
initialHiddenCheck = false;
199-
}
180+
if (invisible) {
181+
element.style.display = saveDisplay;
200182
}
201-
202-
resetExpandShrink();
203183
};
204184
element.resizeSensor.resetSensor = reset;
205185

@@ -208,17 +188,19 @@
208188

209189
if (!dirty) return;
210190

211-
lastWidth = size.width;
212-
lastHeight = size.height;
191+
lastWidth = newWidth;
192+
lastHeight = newHeight;
213193

214194
if (element.resizedAttached) {
215195
element.resizedAttached.call(size);
216196
}
217197
};
218198

219199
var onScroll = function() {
220-
size = getElementSize(element);
221-
dirty = size.width !== lastWidth || size.height !== lastHeight;
200+
var size = getElementSize(element);
201+
var newWidth = size.width;
202+
var newHeight = size.height;
203+
dirty = newWidth !== lastWidth || newHeight !== lastHeight;
222204

223205
if (dirty && !rafId) {
224206
rafId = requestAnimationFrame(onResized);
@@ -242,39 +224,12 @@
242224
requestAnimationFrame(reset);
243225
}
244226

245-
if (typeof ResizeObserver !== "undefined") {
246-
observer = new ResizeObserver(function(element){
247-
forEachElement(element, function (elem) {
248-
callback.call(
249-
this,
250-
{
251-
width: elem.contentRect.width,
252-
height: elem.contentRect.height
253-
}
254-
);
255-
});
256-
});
257-
if (element !== undefined) {
258-
forEachElement(element, function(elem){
259-
observer.observe(elem);
260-
});
261-
}
262-
}
263-
else {
264-
forEachElement(element, function(elem){
265-
attachResizeEvent(elem, callback);
266-
});
267-
}
227+
forEachElement(element, function(elem){
228+
attachResizeEvent(elem, callback);
229+
});
268230

269231
this.detach = function(ev) {
270-
if (typeof ResizeObserver != "undefined") {
271-
forEachElement(element, function(elem){
272-
observer.unobserve(elem);
273-
});
274-
}
275-
else {
276-
ResizeSensor.detach(element, ev);
277-
}
232+
ResizeSensor.detach(element, ev);
278233
};
279234

280235
this.reset = function() {

0 commit comments

Comments
 (0)