| 21 | } |
| 22 | |
| 23 | export class MediaQueryObserver implements Taro.MediaQueryObserver { |
| 24 | private _mediaQueryObserver: MediaQueryList |
| 25 | private _listener: (ev: MediaQueryListEvent) => void |
| 26 | |
| 27 | // 监听页面媒体查询变化情况 |
| 28 | public observe (descriptor: Taro.MediaQueryObserver.descriptor, callback: Taro.MediaQueryObserver.observeCallback): void { |
| 29 | if (isFunction(callback)) { |
| 30 | // 创建媒体查询对象 |
| 31 | this._mediaQueryObserver = window.matchMedia(generateMediaQueryStr(descriptor)) |
| 32 | // 监听器 |
| 33 | this._listener = (ev: MediaQueryListEvent) => { |
| 34 | callback({ matches: ev.matches }) |
| 35 | } |
| 36 | callback({ matches: this._mediaQueryObserver.matches }) |
| 37 | // 兼容旧浏览器中 MediaQueryList 尚未继承于 EventTarget 导致不存在 'addEventListener' |
| 38 | if ('addEventListener' in this._mediaQueryObserver) { |
| 39 | this._mediaQueryObserver.addEventListener('change', this._listener) |
| 40 | } else { |
| 41 | // @ts-ignore |
| 42 | this._mediaQueryObserver.addListener(this._listener) |
| 43 | } |
| 44 | } |
| 45 | } |
| 46 | |
| 47 | // 停止监听,销毁媒体查询对象 |
| 48 | public disconnect (): void { |
| 49 | if (this._mediaQueryObserver && this._listener) { |
| 50 | // 兼容旧浏览器中 MediaQueryList 尚未继承于 EventTarget 导致不存在 'removeEventListener' |
| 51 | if ('removeEventListener' in this._mediaQueryObserver) { |
| 52 | this._mediaQueryObserver.removeEventListener('change', this._listener) |
| 53 | } else { |
| 54 | // @ts-ignore |
| 55 | this._mediaQueryObserver.removeListener(this._listener) |
| 56 | } |
| 57 | } |
| 58 | } |
| 59 | } |
nothing calls this directly
no outgoing calls
no test coverage detected