123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157 |
- var SingleEmitter = require('./SingleEmitter');
- var h = require('./h');
- var $event = require('./$event');
- var $css = require('./$css');
- var contain = require('./contain');
- var extend = require('./extend');
- var root = require('./root');
- if (root.ResizeObserver && !false) {
- exports = SingleEmitter.extend({
- initialize: function ResizeSensor(el) {
- var _this = this;
- if (el._resizeSensor) {
- return el._resizeSensor;
- }
- this.callSuper(SingleEmitter, 'initialize');
- var resizeObserver = new root.ResizeObserver(function() {
- return _this.emit();
- });
- resizeObserver.observe(el);
- el._resizeSensor = this;
- this._resizeObserver = resizeObserver;
- this._el = el;
- },
- destroy: function() {
- var el = this._el;
- if (!el._resizeSensor) {
- return;
- }
- this.rmAllListeners();
- delete el._resizeSensor;
- this._resizeObserver.unobserve(el);
- }
- });
- } else {
- exports = SingleEmitter.extend({
- initialize: function ResizeSensor(el) {
- if (el._resizeSensor) {
- return el._resizeSensor;
- }
- this.callSuper(SingleEmitter, 'initialize');
- this._el = el;
- el._resizeSensor = this;
- if (
- !contain(
- ['absolute', 'relative', 'fixed', 'sticky'],
- $css(el, 'position')
- )
- ) {
- $css(el, 'position', 'relative');
- }
- this._appendResizeSensor();
- this._bindEvent();
- },
- destroy: function() {
- var el = this._el;
- if (!el._resizeSensor) {
- return;
- }
- this.rmAllListeners();
- delete el._resizeSensor;
- el.removeChild(this._resizeSensorEl);
- },
- _appendResizeSensor: function() {
- var el = this._el;
- var style = {
- pointerEvents: 'none',
- position: 'absolute',
- left: '0px',
- top: '0px',
- right: '0px',
- bottom: '0px',
- overflow: 'hidden',
- zIndex: '-1',
- visibility: 'hidden',
- maxWidth: '100%'
- };
- var styleChild = {
- position: 'absolute',
- left: '0px',
- top: '0px',
- transition: '0s'
- };
- var expandChildEl = h('div', {
- style: styleChild
- });
- var expandEl = h(
- 'div.resize-sensor-expand',
- {
- style: style
- },
- expandChildEl
- );
- var shrinkEl = h(
- 'div.resize-sensor-shrink',
- {
- style: style
- },
- h('div', {
- style: extend(
- {
- width: '200%',
- height: '200%'
- },
- styleChild
- )
- })
- );
- var resizeSensorEl = h(
- 'div.resize-sensor',
- {
- dir: 'ltr',
- style: style
- },
- expandEl,
- shrinkEl
- );
- this._expandEl = expandEl;
- this._expandChildEl = expandChildEl;
- this._shrinkEl = shrinkEl;
- this._resizeSensorEl = resizeSensorEl;
- el.appendChild(resizeSensorEl);
- this._resetExpandShrink();
- },
- _bindEvent: function() {
- var _this2 = this;
- $event.on(this._expandEl, 'scroll', function() {
- return _this2._onScroll();
- });
- $event.on(this._shrinkEl, 'scroll', function() {
- return _this2._onScroll();
- });
- },
- _onScroll: function() {
- this.emit();
- this._resetExpandShrink();
- },
- _resetExpandShrink: function() {
- var el = this._el;
- var width = el.offsetWidth;
- var height = el.offsetHeight;
- $css(this._expandChildEl, {
- width: width + 10,
- height: height + 10
- });
- extend(this._expandEl, {
- scrollLeft: width + 10,
- scrollTop: height + 10
- });
- extend(this._shrinkEl, {
- scrollLeft: width + 10,
- scrollTop: height + 10
- });
- }
- });
- }
- module.exports = exports;
|