1 | "use strict";
|
2 |
|
3 | Object.defineProperty(exports, "__esModule", {
|
4 | value: true
|
5 | });
|
6 | exports.removeEventListener = exports.addEventListener = exports.off = exports.on = undefined;
|
7 |
|
8 | var _platform = require("./platform");
|
9 |
|
10 | var _utils = require("./utils");
|
11 |
|
12 |
|
13 |
|
14 | var requestAnimationFrame = _platform.isServer ? _utils.noop : _platform.window.requestAnimationFrame || _platform.window.mozRequestAnimationFrame || _platform.window.webkitRequestAnimationFrame || function (fn) {
|
15 | _platform.window.setTimeout(fn, 20);
|
16 | };
|
17 |
|
18 | var cancelAnimationFrame = _platform.isServer ? _utils.noop : _platform.window.cancelAnimationFrame || _platform.window.mozCancelAnimationFrame || _platform.window.webkitCancelAnimationFrame || _platform.window.clearTimeout;
|
19 |
|
20 | var isIE = _platform.isServer ? false : navigator.userAgent.match(/Trident/);
|
21 |
|
22 | var namespace = "__resizeDetector__";
|
23 |
|
24 | var uninitialize = function uninitialize(el) {
|
25 | el[namespace].destroy();
|
26 | el[namespace] = undefined;
|
27 | };
|
28 |
|
29 | var createElementHack = function createElementHack() {
|
30 | var el = document.createElement("object");
|
31 | el.className = "resize-sensor";
|
32 | el.setAttribute("style", "display: block; position: absolute; top: 0; left: 0; height: 100%; width: 100%; overflow: hidden; pointer-events: none; z-index: -1;");
|
33 | el.setAttribute("class", "resize-sensor");
|
34 | el.type = "text/html";
|
35 | el.data = "about:blank";
|
36 | return el;
|
37 | };
|
38 |
|
39 | var initialize = function initialize(el) {
|
40 |
|
41 | var detector = el[namespace] = {};
|
42 | detector.listeners = [];
|
43 |
|
44 | var onResize = function onResize(e) {
|
45 | |
46 |
|
47 | if (detector.resizeRAF) cancelAnimationFrame(detector.resizeRAF);
|
48 | detector.resizeRAF = requestAnimationFrame(function () {
|
49 | detector.listeners.forEach(function (fn) {
|
50 | fn(e);
|
51 | });
|
52 | });
|
53 | };
|
54 |
|
55 | if (isIE) {
|
56 | |
57 |
|
58 | el.addEventListener("onresize", onResize);
|
59 | detector.destroy = function () {
|
60 | el.removeEventListener("onresize", onResize);
|
61 | };
|
62 | } else {
|
63 | if (getComputedStyle(el).position === "static") {
|
64 | detector.elWasStaticPosition = true;
|
65 | el.style.position = "relative";
|
66 | }
|
67 | var objEl = createElementHack();
|
68 | objEl.onload = function () /* event */{
|
69 | this.contentDocument.defaultView.addEventListener("resize", onResize);
|
70 | };
|
71 | detector.destroy = function () {
|
72 | if (detector.elWasStaticPosition) el.style.position = "";
|
73 |
|
74 |
|
75 | el.removeChild(objEl);
|
76 | };
|
77 |
|
78 | el.appendChild(objEl);
|
79 | }
|
80 | };
|
81 |
|
82 | var on = function on(el, fn) {
|
83 |
|
84 | |
85 |
|
86 |
|
87 | if (el === _platform.window) {
|
88 | _platform.window.addEventListener("resize", fn);
|
89 | return;
|
90 | }
|
91 |
|
92 |
|
93 |
|
94 | if (!el[namespace]) initialize(el);
|
95 | el[namespace].listeners.push(fn);
|
96 | };
|
97 |
|
98 | var off = function off(el, fn) {
|
99 | if (el === _platform.window) {
|
100 | _platform.window.removeEventListener("resize", fn);
|
101 | return;
|
102 | }
|
103 | var detector = el[namespace];
|
104 | if (!detector) return;
|
105 | var i = detector.listeners.indexOf(fn);
|
106 | if (i !== -1) detector.listeners.splice(i, 1);
|
107 | if (!detector.listeners.length) uninitialize(el);
|
108 | };
|
109 |
|
110 | exports.default = {
|
111 | on: on,
|
112 | off: off,
|
113 | addEventListener: on,
|
114 | removeEventListener: off
|
115 | };
|
116 | exports.on = on;
|
117 | exports.off = off;
|
118 | exports.addEventListener = on;
|
119 | exports.removeEventListener = off; |
\ | No newline at end of file |