observerUtil.js 1.7 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546
  1. "use strict";
  2. var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault").default;
  3. Object.defineProperty(exports, "__esModule", {
  4. value: true
  5. });
  6. exports._rs = exports._el = void 0;
  7. exports.observe = observe;
  8. exports.unobserve = unobserve;
  9. var _resizeObserverPolyfill = _interopRequireDefault(require("resize-observer-polyfill"));
  10. // =============================== Const ===============================
  11. var elementListeners = new Map();
  12. function onResize(entities) {
  13. entities.forEach(function (entity) {
  14. var _elementListeners$get;
  15. var target = entity.target;
  16. (_elementListeners$get = elementListeners.get(target)) === null || _elementListeners$get === void 0 || _elementListeners$get.forEach(function (listener) {
  17. return listener(target);
  18. });
  19. });
  20. }
  21. // Note: ResizeObserver polyfill not support option to measure border-box resize
  22. var resizeObserver = new _resizeObserverPolyfill.default(onResize);
  23. // Dev env only
  24. var _el = exports._el = process.env.NODE_ENV !== 'production' ? elementListeners : null; // eslint-disable-line
  25. var _rs = exports._rs = process.env.NODE_ENV !== 'production' ? onResize : null; // eslint-disable-line
  26. // ============================== Observe ==============================
  27. function observe(element, callback) {
  28. if (!elementListeners.has(element)) {
  29. elementListeners.set(element, new Set());
  30. resizeObserver.observe(element);
  31. }
  32. elementListeners.get(element).add(callback);
  33. }
  34. function unobserve(element, callback) {
  35. if (elementListeners.has(element)) {
  36. elementListeners.get(element).delete(callback);
  37. if (!elementListeners.get(element).size) {
  38. resizeObserver.unobserve(element);
  39. elementListeners.delete(element);
  40. }
  41. }
  42. }