|
4 | 4 | * https://github.com/sdecima/javascript-detect-element-resize
|
5 | 5 | * Sebastian Decima
|
6 | 6 | *
|
7 |
| -* version: 0.3 |
| 7 | +* version: 0.4 |
8 | 8 | **/
|
9 | 9 |
|
10 | 10 | (function ( $ ) {
|
| 11 | + var is_above_ie10 = !(window.ActiveXObject) && "ActiveXObject" in window; |
| 12 | + var supports_mutation_observer = 'MutationObserver' in window; |
| 13 | + |
11 | 14 | function addFlowListener(element, type, fn){
|
12 | 15 | var flow = type == 'over';
|
13 | 16 | element.addEventListener('OverflowEvent' in window ? 'overflowchanged' : type + 'flow', function(e){
|
|
52 | 55 | };
|
53 | 56 |
|
54 | 57 | function addResizeListener(element, fn){
|
55 |
| - if ('MutationObserver' in window) { |
| 58 | + if (is_above_ie10 && supports_mutation_observer) { |
56 | 59 | fn._mutationObserver = addResizeMutationObserver(element, fn);
|
57 | 60 | var events = element._mutationObservers || (element._mutationObservers = []);
|
58 | 61 | if (indexOf.call(events, fn) == -1) events.push(fn);
|
59 | 62 | } else {
|
60 |
| - var resize = 'onresize' in element; |
61 |
| - if (!resize && !element._resizeSensor) { |
| 63 | + var supports_onresize = 'onresize' in element; |
| 64 | + if (!supports_onresize && !element._resizeSensor) { |
62 | 65 | var sensor_style = 'position: absolute; top: 0; left: 0; width: 100%; height: 100%; overflow: hidden; z-index: -1;';
|
63 | 66 | var sensor = element._resizeSensor = document.createElement('div');
|
64 | 67 | sensor.className = 'resize-sensor';
|
|
101 | 104 | }
|
102 | 105 | var events = element._flowEvents || (element._flowEvents = []);
|
103 | 106 | if (indexOf.call(events, fn) == -1) events.push(fn);
|
104 |
| - if (!resize) element.addEventListener('resize', fn, false); |
| 107 | + if (!supports_onresize) element.addEventListener('resize', fn, false); |
105 | 108 | element.onresize = function(e){
|
106 | 109 | forEach.call(events, function(fn){
|
107 | 110 | fn.call(element, e);
|
|
111 | 114 | };
|
112 | 115 |
|
113 | 116 | function removeResizeListener(element, fn){
|
114 |
| - if ('MutationObserver' in window) { |
| 117 | + if (is_above_ie10 && supports_mutation_observer) { |
115 | 118 | var index = indexOf.call(element._mutationObservers, fn);
|
116 | 119 | if (index > -1) {
|
117 | 120 | var observer = element._mutationObservers[index]._mutationObserver;
|
118 | 121 | element._mutationObservers.splice(index, 1);
|
119 | 122 | observer.disconnect();
|
120 | 123 | }
|
121 | 124 | } else {
|
122 |
| - var resize = 'onresize' in element; |
| 125 | + var supports_onresize = 'onresize' in element; |
123 | 126 | var index = indexOf.call(element._flowEvents, fn);
|
124 | 127 | if (index > -1) element._flowEvents.splice(index, 1);
|
125 | 128 | if (!element._flowEvents.length) {
|
|
129 | 132 | if (sensor._resetPosition) element.style.position = 'static';
|
130 | 133 | try { delete element._resizeSensor; } catch(e) { /* delete arrays not supported on IE 7 and below */}
|
131 | 134 | }
|
132 |
| - if (resize) element.onresize = null; |
| 135 | + if (supports_onresize) element.onresize = null; |
133 | 136 | try { delete element._flowEvents; } catch(e) { /* delete arrays not supported on IE 7 and below */}
|
134 | 137 | }
|
135 |
| - if(!resize) element.removeEventListener('resize', fn); |
| 138 | + if(!supports_onresize) element.removeEventListener('resize', fn); |
136 | 139 | }
|
137 | 140 | };
|
138 | 141 |
|
|
0 commit comments