tweak when to use requestIdleCallback

smoother-timeline-navigation
Nolan Lawson 2018-03-22 22:53:50 -07:00
rodzic 0dc676b1c5
commit 3b03bd0e8d
2 zmienionych plików z 19 dodań i 1 usunięć

Wyświetl plik

@ -5,6 +5,7 @@
import { isFullscreen, attachFullscreenListener, detachFullscreenListener } from '../../_utils/fullscreen'
import { mark, stop } from '../../_utils/marks'
import { scheduleIdleTask } from '../../_utils/scheduleIdleTask'
import { isMobile } from '../../_utils/isMobile'
const SCROLL_EVENT_DELAY = 300
@ -72,7 +73,13 @@
},
onScroll(event) {
let { scrollTop, scrollHeight } = event.target
scheduleIdleTask(() => { // delay slightly to improve scroll perf
// On mobile devices, this can make scrolling more responsive. On
// desktop browsers... it's probably overkill, and can lead to a
// checkerboarding issue ("I just scrolled, why is it blank for 5 seconds?").
let runTask = isMobile() ? scheduleIdleTask : requestAnimationFrame
runTask(() => {
mark('onScroll -> setForRealm()')
this.store.setForRealm({scrollTop, scrollHeight})
stop('onScroll -> setForRealm()')

Wyświetl plik

@ -0,0 +1,11 @@
// Rough guess at whether this is a "mobile" device or not, for the purposes
// of "device class" estimations
let cached
export function isMobile () {
if (!cached) {
cached = !!(process.browser && navigator.userAgent.match(/(iPhone|iPod|iPad|Android)/))
}
return cached
}