mirror of https://github.com/Chocobozzz/PeerTube
Improve screen cache service
parent
1ee156b2c5
commit
fc11a44ec9
|
@ -1,23 +1,37 @@
|
|||
import { Injectable, NgZone } from '@angular/core'
|
||||
import { Injectable } from '@angular/core'
|
||||
|
||||
@Injectable()
|
||||
export class ScreenService {
|
||||
private windowInnerWidth: number
|
||||
private lastFunctionCallTime: number
|
||||
private cacheForMs = 500
|
||||
|
||||
constructor (private zone: NgZone) {
|
||||
this.windowInnerWidth = window.innerWidth
|
||||
|
||||
// Try to cache a little bit window.innerWidth
|
||||
this.zone.runOutsideAngular(() => {
|
||||
setInterval(() => this.windowInnerWidth = window.innerWidth, 500)
|
||||
})
|
||||
constructor () {
|
||||
this.refreshWindowInnerWidth()
|
||||
}
|
||||
|
||||
isInSmallView () {
|
||||
return this.windowInnerWidth < 600
|
||||
return this.getWindowInnerWidth() < 600
|
||||
}
|
||||
|
||||
isInMobileView () {
|
||||
return this.windowInnerWidth < 500
|
||||
return this.getWindowInnerWidth() < 500
|
||||
}
|
||||
|
||||
// Cache window inner width, because it's an expensive call
|
||||
private getWindowInnerWidth () {
|
||||
if (this.cacheWindowInnerWidthExpired()) this.refreshWindowInnerWidth()
|
||||
|
||||
return this.windowInnerWidth
|
||||
}
|
||||
|
||||
private refreshWindowInnerWidth () {
|
||||
this.lastFunctionCallTime = new Date().getTime()
|
||||
|
||||
this.windowInnerWidth = window.innerWidth
|
||||
}
|
||||
|
||||
private cacheWindowInnerWidthExpired () {
|
||||
return new Date().getTime() > (this.lastFunctionCallTime + this.cacheForMs)
|
||||
}
|
||||
}
|
||||
|
|
Loading…
Reference in New Issue