UNPKG

tav-ui

Version:
177 lines (172 loc) 5.09 kB
'use strict'; Object.defineProperty(exports, '__esModule', { value: true }); var lodashEs = require('lodash-es'); function getBoundingClientRect(element) { if (!element || !element.getBoundingClientRect) return 0; return element.getBoundingClientRect(); } function trim(string) { return (string || "").replace(/^[\s\uFEFF]+|[\s\uFEFF]+$/g, ""); } function hasClass(el, cls) { if (!el || !cls) return false; if (cls.includes(" ")) throw new Error("className should not contain space."); if (el.classList) return el.classList.contains(cls); else return ` ${el.className} `.includes(` ${cls} `); } function addClass(el, cls) { if (!el) return; let curClass = el.className; const classes = (cls || "").split(" "); for (let i = 0, j = classes.length; i < j; i++) { const clsName = classes[i]; if (!clsName) continue; if (el.classList) el.classList.add(clsName); else if (!hasClass(el, clsName)) curClass += ` ${clsName}`; } if (!el.classList) el.className = curClass; } function removeClass(el, cls) { if (!el || !cls) return; const classes = cls.split(" "); let curClass = ` ${el.className} `; for (let i = 0, j = classes.length; i < j; i++) { const clsName = classes[i]; if (!clsName) continue; if (el.classList) el.classList.remove(clsName); else if (hasClass(el, clsName)) curClass = curClass.replace(` ${clsName} `, " "); } if (!el.classList) el.className = trim(curClass); } function getViewportOffset(element) { const doc = document.documentElement; const docScrollLeft = doc.scrollLeft; const docScrollTop = doc.scrollTop; const docClientLeft = doc.clientLeft; const docClientTop = doc.clientTop; const pageXOffset = window.pageXOffset; const pageYOffset = window.pageYOffset; const box = getBoundingClientRect(element); const { left: retLeft, top: rectTop, width: rectWidth, height: rectHeight } = box; const scrollLeft = (pageXOffset || docScrollLeft) - (docClientLeft || 0); const scrollTop = (pageYOffset || docScrollTop) - (docClientTop || 0); const offsetLeft = retLeft + pageXOffset; const offsetTop = rectTop + pageYOffset; const left = offsetLeft - scrollLeft; const top = offsetTop - scrollTop; const clientWidth = window.document.documentElement.clientWidth; const clientHeight = window.document.documentElement.clientHeight; return { left, top, right: clientWidth - rectWidth - left, bottom: clientHeight - rectHeight - top, rightIncludeBody: clientWidth - left, bottomIncludeBody: clientHeight - top }; } function hackCss(attr, value) { const prefix = ["webkit", "Moz", "ms", "OT"]; const styleObj = {}; prefix.forEach((item) => { styleObj[`${item}${lodashEs.upperFirst(attr)}`] = value; }); return { ...styleObj, [attr]: value }; } function on(element, event, handler) { if (element && event && handler) element.addEventListener(event, handler, false); } function off(element, event, handler) { if (element && event && handler) element.removeEventListener(event, handler, false); } function once(el, event, fn) { const listener = function(...args) { if (fn) fn.apply(this, args); off(el, event, listener); }; on(el, event, listener); } function useRafThrottle(fn) { let locked = false; return function(...args) { if (locked) return; locked = true; window.requestAnimationFrame(() => { fn.apply(this, args); locked = false; }); }; } function doubleRequestAnimationFrame(callback) { requestAnimationFrame(() => { requestAnimationFrame(callback); }); } function componentRendered(callback) { if (callback && typeof callback === "function") { doubleRequestAnimationFrame(callback); } else { return new Promise((resolve) => { doubleRequestAnimationFrame(resolve); }); } } function parentsUntil(el, selector, filter) { const result = []; const matchesSelector = el.matches || el.webkitMatchesSelector || el.mozMatchesSelector || el.msMatchesSelector; el = el.parentElement; while (el && !matchesSelector.call(el, selector)) { if (!filter) result.push(el); else if (matchesSelector.call(el, filter)) result.push(el); el = el.parentElement; } return result; } function closest(el, selector) { const matchesSelector = el.matches || el.webkitMatchesSelector || el.mozMatchesSelector || el.msMatchesSelector; while (el) { if (matchesSelector.call(el, selector)) return el; else el = el.parentElement; } return null; } exports.addClass = addClass; exports.closest = closest; exports.componentRendered = componentRendered; exports.getBoundingClientRect = getBoundingClientRect; exports.getViewportOffset = getViewportOffset; exports.hackCss = hackCss; exports.hasClass = hasClass; exports.off = off; exports.on = on; exports.once = once; exports.parentsUntil = parentsUntil; exports.removeClass = removeClass; exports.useRafThrottle = useRafThrottle; //# sourceMappingURL=domUtils2.js.map