MCPcopy
hub / github.com/NervJS/taro / MediaQueryObserver

Class MediaQueryObserver

packages/taro-h5/src/api/wxml/MediaQueryObserver.ts:23–59  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

21}
22
23export 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}

Callers

nothing calls this directly

Calls

no outgoing calls

Tested by

no test coverage detected