semaphore/routes/_components/LazyPage.html

26 lines
712 B
HTML

{{#if revealed}}
<:Component {pageComponent} :params />
{{/if}}
<script>
// On the very first page load, avoid doing a "reveal" because
// it leads to a flash between when the SSR is shown, the two frame we hide it,
// and then when we show it again.
//
// We only really need LazyPage behavior when the user is clicking around
// after the page has loaded, to improve input responsiveness.
let firstTime = true
export default {
oncreate() {
firstTime = false
requestAnimationFrame(() => {
requestAnimationFrame(() => {
this.set({revealed: true})
})
})
},
data: () => ({
revealed: !process.browser || firstTime
})
}
</script>