| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596 |
- "use strict";
- Object.defineProperty(exports, "__esModule", {
- value: true
- });
- exports.createSensor = void 0;
- var _debounce = _interopRequireDefault(require("../debounce"));
- function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { "default": obj }; }
- /**
- * Created by hustcc on 18/7/5.
- * Contract: i@hust.cc
- */
- var createSensor = function createSensor(element) {
- var sensor = undefined; // callback
- var listeners = [];
- /**
- * trigger listeners
- */
- var resizeListener = (0, _debounce["default"])(function () {
- // trigger all
- listeners.forEach(function (listener) {
- listener(element);
- });
- });
- /**
- * create ResizeObserver sensor
- * @returns
- */
- var newSensor = function newSensor() {
- var s = new ResizeObserver(resizeListener); // listen element
- s.observe(element); // trigger once
- resizeListener();
- return s;
- };
- /**
- * listen with callback
- * @param cb
- */
- var bind = function bind(cb) {
- if (!sensor) {
- sensor = newSensor();
- }
- if (listeners.indexOf(cb) === -1) {
- listeners.push(cb);
- }
- };
- /**
- * destroy
- */
- var destroy = function destroy() {
- sensor.disconnect();
- listeners = [];
- sensor = undefined;
- };
- /**
- * cancel bind
- * @param cb
- */
- var unbind = function unbind(cb) {
- var idx = listeners.indexOf(cb);
- if (idx !== -1) {
- listeners.splice(idx, 1);
- } // no listener, and sensor is exist
- // then destroy the sensor
- if (listeners.length === 0 && sensor) {
- destroy();
- }
- };
- return {
- element: element,
- bind: bind,
- destroy: destroy,
- unbind: unbind
- };
- };
- exports.createSensor = createSensor;
|