|
15 | 15 | </template> |
16 | 16 | <script> |
17 | 17 | /* eslint-disable no-console */ |
18 | | - /* eslint-disable import/extensions */ |
19 | 18 | import Spinner from './Spinner'; |
20 | | - import { supportsPassive } from '../utils/supportsPassive.js'; |
21 | 19 |
|
22 | 20 | const LOOP_CHECK_TIMEOUT = 1000; // the timeout for check infinite loop |
23 | 21 | const LOOP_CHECK_MAX_CALLS = 10; // the maximum number of continuous calls |
|
59 | 57 | 'more details: https://github.com/PeachScript/vue-infinite-loading/issues/55#issuecomment-316934169', |
60 | 58 | ].join('\n'), |
61 | 59 | }; |
| 60 | + const evt3rdArg = (() => { |
| 61 | + let result = false; |
| 62 | +
|
| 63 | + try { |
| 64 | + const arg = Object.defineProperty({}, 'passive', { |
| 65 | + get() { |
| 66 | + result = { passive: true }; |
| 67 | + }, |
| 68 | + }); |
| 69 | +
|
| 70 | + window.addEventListener('testpassive', arg, arg); |
| 71 | + window.remove('testpassive', arg, arg); |
| 72 | + } catch (e) { /* */ } |
| 73 | +
|
| 74 | + return result; |
| 75 | + })(); |
62 | 76 |
|
63 | 77 | export default { |
64 | 78 | name: 'InfiniteLoading', |
|
133 | 147 | }.bind(this); |
134 | 148 |
|
135 | 149 | setTimeout(this.scrollHandler, 1); |
136 | | - this.scrollParent.addEventListener('scroll', this.scrollHandler, supportsPassive ? { passive: true } : false); |
| 150 | + this.scrollParent.addEventListener('scroll', this.scrollHandler, evt3rdArg); |
137 | 151 |
|
138 | 152 | this.$on('$InfiniteLoading:loaded', (ev) => { |
139 | 153 | this.isFirstLoad = false; |
|
156 | 170 | this.$forceUpdate(); |
157 | 171 | }); |
158 | 172 |
|
159 | | - this.scrollParent.removeEventListener('scroll', this.scrollHandler, supportsPassive ? { passive: true } : false); |
| 173 | + this.scrollParent.removeEventListener('scroll', this.scrollHandler, evt3rdArg); |
160 | 174 |
|
161 | 175 | if (!ev || ev.target !== this) { |
162 | 176 | console.warn(WARNINGS.STATE_CHANGER); |
|
168 | 182 | this.isComplete = false; |
169 | 183 | this.isFirstLoad = true; |
170 | 184 | this.inThrottle = false; |
171 | | - this.scrollParent.addEventListener('scroll', this.scrollHandler, supportsPassive ? { passive: true } : false); |
| 185 | + this.scrollParent.addEventListener('scroll', this.scrollHandler, evt3rdArg); |
172 | 186 | setTimeout(this.scrollHandler, 1); |
173 | 187 | }); |
174 | 188 |
|
|
203 | 217 | */ |
204 | 218 | deactivated() { |
205 | 219 | this.isLoading = false; |
206 | | - this.scrollParent.removeEventListener('scroll', this.scrollHandler, supportsPassive ? { passive: true } : false); |
| 220 | + this.scrollParent.removeEventListener('scroll', this.scrollHandler, evt3rdArg); |
207 | 221 | }, |
208 | 222 | activated() { |
209 | | - this.scrollParent.addEventListener('scroll', this.scrollHandler, supportsPassive ? { passive: true } : false); |
| 223 | + this.scrollParent.addEventListener('scroll', this.scrollHandler, evt3rdArg); |
210 | 224 | }, |
211 | 225 | methods: { |
212 | 226 | /** |
|
291 | 305 | }, |
292 | 306 | destroyed() { |
293 | 307 | if (!this.isComplete) { |
294 | | - this.scrollParent.removeEventListener('scroll', this.scrollHandler, supportsPassive ? { passive: true } : false); |
| 308 | + this.scrollParent.removeEventListener('scroll', this.scrollHandler, evt3rdArg); |
295 | 309 | } |
296 | 310 | }, |
297 | 311 | }; |
|
0 commit comments