|
319 | 319 | let backdrop = document.querySelector('.nav-backdrop'); |
320 | 320 | let last = null; |
321 | 321 | let ticking = false; |
| 322 | + const settleTimers = []; |
322 | 323 |
|
323 | 324 | const compute = () => { |
324 | 325 | ticking = false; |
325 | 326 |
|
326 | | - const y = window.scrollY || window.pageYOffset || 0; |
| 327 | + const scrollEl = document.scrollingElement || document.documentElement || document.body; |
| 328 | + const y = Math.max( |
| 329 | + window.scrollY || 0, |
| 330 | + window.pageYOffset || 0, |
| 331 | + scrollEl?.scrollTop || 0 |
| 332 | + ); |
327 | 333 | const scrolled = y > 4; |
328 | 334 |
|
329 | 335 | if (scrolled !== last){ |
|
341 | 347 | requestAnimationFrame(compute); |
342 | 348 | }; |
343 | 349 |
|
| 350 | + const clearSettleTimers = () => { |
| 351 | + while (settleTimers.length) { |
| 352 | + window.clearTimeout(settleTimers.pop()); |
| 353 | + } |
| 354 | + }; |
| 355 | + |
| 356 | + const scheduleSettledChange = (baseDelay = 0) => { |
| 357 | + clearSettleTimers(); |
| 358 | + [baseDelay, baseDelay + 140, baseDelay + 320, baseDelay + 560].forEach((delay) => { |
| 359 | + settleTimers.push(window.setTimeout(onChange, delay)); |
| 360 | + }); |
| 361 | + }; |
| 362 | + |
344 | 363 | compute(); |
345 | 364 | window.addEventListener('scroll', onChange, { passive:true }); |
346 | | - window.addEventListener('resize', onChange); |
347 | | - window.addEventListener('orientationchange', onChange); |
348 | | - window.addEventListener('pageshow', onChange); |
| 365 | + window.addEventListener('resize', () => scheduleSettledChange(80)); |
| 366 | + window.addEventListener('orientationchange', () => scheduleSettledChange(140)); |
| 367 | + window.addEventListener('pageshow', () => scheduleSettledChange(80)); |
| 368 | + if (window.visualViewport){ |
| 369 | + window.visualViewport.addEventListener('resize', () => scheduleSettledChange(100)); |
| 370 | + window.visualViewport.addEventListener('scroll', () => scheduleSettledChange(100)); |
| 371 | + } |
349 | 372 | } |
350 | 373 |
|
351 | 374 | function initMenuThumb(){ |
|
0 commit comments