resizeObserver.js 1.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596
  1. "use strict";
  2. Object.defineProperty(exports, "__esModule", {
  3. value: true
  4. });
  5. exports.createSensor = void 0;
  6. var _debounce = _interopRequireDefault(require("../debounce"));
  7. function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { "default": obj }; }
  8. /**
  9. * Created by hustcc on 18/7/5.
  10. * Contract: i@hust.cc
  11. */
  12. var createSensor = function createSensor(element) {
  13. var sensor = undefined; // callback
  14. var listeners = [];
  15. /**
  16. * trigger listeners
  17. */
  18. var resizeListener = (0, _debounce["default"])(function () {
  19. // trigger all
  20. listeners.forEach(function (listener) {
  21. listener(element);
  22. });
  23. });
  24. /**
  25. * create ResizeObserver sensor
  26. * @returns
  27. */
  28. var newSensor = function newSensor() {
  29. var s = new ResizeObserver(resizeListener); // listen element
  30. s.observe(element); // trigger once
  31. resizeListener();
  32. return s;
  33. };
  34. /**
  35. * listen with callback
  36. * @param cb
  37. */
  38. var bind = function bind(cb) {
  39. if (!sensor) {
  40. sensor = newSensor();
  41. }
  42. if (listeners.indexOf(cb) === -1) {
  43. listeners.push(cb);
  44. }
  45. };
  46. /**
  47. * destroy
  48. */
  49. var destroy = function destroy() {
  50. sensor.disconnect();
  51. listeners = [];
  52. sensor = undefined;
  53. };
  54. /**
  55. * cancel bind
  56. * @param cb
  57. */
  58. var unbind = function unbind(cb) {
  59. var idx = listeners.indexOf(cb);
  60. if (idx !== -1) {
  61. listeners.splice(idx, 1);
  62. } // no listener, and sensor is exist
  63. // then destroy the sensor
  64. if (listeners.length === 0 && sensor) {
  65. destroy();
  66. }
  67. };
  68. return {
  69. element: element,
  70. bind: bind,
  71. destroy: destroy,
  72. unbind: unbind
  73. };
  74. };
  75. exports.createSensor = createSensor;