vuescroll
Version:
A beautiful scrollbar based on Vue.js for PC and mobile.
47 lines (44 loc) • 1.43 kB
JavaScript
// detect content size change
import { eventCenter, isIE } from '../../util';
export function listenResize(element, callback) {
return injectObject(element, callback);
}
function injectObject(element, callback) {
if (element.hasResized) {
return;
}
var OBJECT_STYLE =
'display: block; position: absolute; top: 0; left: 0; width: 100%; height: 100%; border: none; padding: 0; margin: 0; opacity: 0; z-index: -1000; pointer-events: none;';
// define a wrap due to ie's zIndex bug
var objWrap = document.createElement('div');
objWrap.style.cssText = OBJECT_STYLE;
var object = document.createElement('object');
object.style.cssText = OBJECT_STYLE;
object.type = 'text/html';
object.tabIndex = -1;
object.onload = () => {
eventCenter(object.contentDocument.defaultView, 'resize', callback);
};
// https://github.com/wnr/element-resize-detector/blob/aafe9f7ea11d1eebdab722c7c5b86634e734b9b8/src/detection-strategy/object.js#L159
if (!isIE()) {
object.data = 'about:blank';
}
objWrap.isResizeElm = true;
objWrap.appendChild(object);
element.appendChild(objWrap);
if (isIE()) {
object.data = 'about:blank';
}
return function destroy() {
if (object.contentDocument) {
eventCenter(
object.contentDocument.defaultView,
'resize',
callback,
'off'
);
}
element.removeChild(objWrap);
element.hasResized = false;
};
}