UNPKG

z-util-page

Version:
132 lines (131 loc) 3.56 kB
"use strict"; /** * @module DomHelper * @category DOM操作辅助类 */ Object.defineProperty(exports, "__esModule", { value: true }); exports.scrollToTop = scrollToTop; exports.scrollToBottom = scrollToBottom; exports.scrollToLeft = scrollToLeft; exports.scrollToRight = scrollToRight; exports.draggable = draggable; /** * 将可滚动元素滚动到顶部 * @example * ```ts * scrollToTop(dom: HTMLElement); * ``` * @param scroll 要滚动的元素 */ function scrollToTop(scroll) { scroll.scrollTop = 0; } /** * 将可滚动元素滚动到底部 * @example * ```ts * scrollToBottom(dom: HTMLElement); * ``` * @param scroll 要滚动的元素 */ function scrollToBottom(scroll) { let scrollTop = scroll.scrollHeight - scroll.clientHeight; scroll.scrollTop = scrollTop > 0 ? scrollTop : 0; } /** * 将可滚动元素滚动到最左侧 * @example * ```ts * scrollToLeft(dom: HTMLElement); * ``` * @param scroll 要滚动的元素 */ function scrollToLeft(scroll) { scroll.scrollLeft = 0; } /** * 将可滚动元素滚动到最右侧 * @example * ```ts * scrollToRight(dom: HTMLElement); * ``` * @param scroll 要滚动的元素 */ function scrollToRight(scroll) { let scrollLeft = scroll.scrollWidth - scroll.clientWidth; scroll.scrollLeft = scrollLeft > 0 ? scrollLeft : 0; } /** * 将一个元素处理为可拖动元素 * @example * ```ts * const handle = draggable(dom: HTMLElement); * // 关闭拖动功能 * handle.close(); * // 开启拖动功能 * handle.open(); * // 指定一个子元素,当该鼠标按下该元素时,关闭拖动功能,鼠标抬起后恢复拖动功能 * handle.wrap(dom: HTMLElement); * ``` * @param dom 要处理的元素 */ function draggable(dom) { let parent = dom.parentElement; if (!parent) { console.warn('parentElement not found'); return false; } let isDraggable = true; dom.style.position = 'absolute'; let rect = dom.getBoundingClientRect(); let geometry = { x: rect.x, y: rect.y, left: rect.left, top: rect.top, }; dom.addEventListener("mousedown", function (e) { geometry.x = e.clientX; geometry.y = e.clientY; isDraggable && (parent === null || parent === void 0 ? void 0 : parent.addEventListener("mousemove", mouseMove)); }); window.addEventListener("mouseup", function () { parent === null || parent === void 0 ? void 0 : parent.removeEventListener("mousemove", mouseMove); }); function mouseMove(e) { let skewX = e.clientX - geometry.x; let skewY = e.clientY - geometry.y; geometry.left += skewX; geometry.top += skewY; dom.style.left = geometry.left + "px"; dom.style.top = geometry.top + "px"; geometry.x = e.clientX; geometry.y = e.clientY; } return { /** * 关闭拖动功能 */ close() { isDraggable = false; }, /** * 开启拖动功能 */ open() { isDraggable = true; }, /** * 指定一个子元素,当该鼠标按下该元素时,关闭拖动功能,鼠标抬起后恢复拖动功能 * @param dom 要处理的元素 */ wrap(dom) { dom.addEventListener('mousedown', function () { isDraggable = false; }); window.addEventListener('mouseup', function () { isDraggable = true; }); } }; }