Blame view

node_modules/resize-observer-polyfill/src/ResizeObserver.js 1.54 KB
2a09d1a4   liuqimichale   添加宜春 天水 宣化
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
  import {Map} from './shims/es6-collections.js';
  import ResizeObserverController from './ResizeObserverController.js';
  import ResizeObserverSPI from './ResizeObserverSPI.js';
  
  // Registry of internal observers. If WeakMap is not available use current shim
  // for the Map collection as it has all required methods and because WeakMap
  // can't be fully polyfilled anyway.
  const observers = typeof WeakMap !== 'undefined' ? new WeakMap() : new Map();
  
  /**
   * ResizeObserver API. Encapsulates the ResizeObserver SPI implementation
   * exposing only those methods and properties that are defined in the spec.
   */
  class ResizeObserver {
      /**
       * Creates a new instance of ResizeObserver.
       *
       * @param {ResizeObserverCallback} callback - Callback that is invoked when
       *      dimensions of the observed elements change.
       */
      constructor(callback) {
          if (!(this instanceof ResizeObserver)) {
              throw new TypeError('Cannot call a class as a function.');
          }
          if (!arguments.length) {
              throw new TypeError('1 argument required, but only 0 present.');
          }
  
          const controller = ResizeObserverController.getInstance();
          const observer = new ResizeObserverSPI(callback, controller, this);
  
          observers.set(this, observer);
      }
  }
  
  // Expose public methods of ResizeObserver.
  [
      'observe',
      'unobserve',
      'disconnect'
  ].forEach(method => {
      ResizeObserver.prototype[method] = function () {
          return observers.get(this)[method](...arguments);
      };
  });
  
  export default ResizeObserver;