Files
OverlayScrollbars/local/browser-testing/dist/Resize.js
T
2022-07-30 19:45:11 +02:00

72 lines
2.8 KiB
JavaScript

// @ts-ignore
import { createDiv, appendChildren, parent, style, on, off, addClass, clientSize, each, } from './support';
export const resize = (element) => {
const resizeListeners = [];
const strMouseTouchDownEvent = 'mousedown touchstart';
const strMouseTouchUpEvent = 'mouseup touchend';
const strMouseTouchMoveEvent = 'mousemove touchmove';
const strSelectStartEvent = 'selectstart';
const dragStartSize = { w: 0, h: 0 };
const dragStartPosition = { x: 0, y: 0 };
const resizeBtn = createDiv('resizeBtn');
appendChildren(element, resizeBtn);
addClass(element, 'resizer');
let dragResizeBtn;
let dragResizer;
const onSelectStart = (event) => {
event.preventDefault();
return false;
};
const resizerResize = (event) => {
const isTouchEvent = event.touches !== undefined;
const mouseOffsetHolder = isTouchEvent
? event.touches[0]
: event;
const sizeStyle = {
width: dragStartSize.w + mouseOffsetHolder.pageX - dragStartPosition.x,
height: dragStartSize.h + mouseOffsetHolder.pageY - dragStartPosition.y,
};
style(dragResizer, sizeStyle);
each(resizeListeners, (listener) => {
if (listener) {
listener(sizeStyle.width, sizeStyle.height);
}
});
event.stopPropagation();
};
const resizerResized = () => {
off(document, strSelectStartEvent, onSelectStart);
off(document, strMouseTouchMoveEvent, resizerResize);
off(document, strMouseTouchUpEvent, resizerResized);
dragResizer = undefined;
dragResizeBtn = undefined;
};
on(resizeBtn, strMouseTouchDownEvent, (event) => {
const { currentTarget } = event;
const correctButton = event.buttons === 1 || event.which === 1;
const isTouchEvent = event.touches !== undefined;
const mouseOffsetHolder = isTouchEvent
? event.touches[0]
: event;
if (correctButton || isTouchEvent) {
dragStartPosition.x = mouseOffsetHolder.pageX;
dragStartPosition.y = mouseOffsetHolder.pageY;
dragResizeBtn = currentTarget;
dragResizer = parent(currentTarget);
const cSize = clientSize(element);
dragStartSize.w = cSize.w;
dragStartSize.h = cSize.h;
on(document, strSelectStartEvent, onSelectStart, { _passive: false });
on(document, strMouseTouchMoveEvent, resizerResize, { _passive: false });
on(document, strMouseTouchUpEvent, resizerResized, { _passive: false });
event.preventDefault();
event.stopPropagation();
}
}, { _passive: false });
return {
addResizeListener(listener) {
resizeListeners.push(listener);
},
};
};
//# sourceMappingURL=Resize.js.map