|
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