tav-ui
Version:
177 lines (172 loc) • 5.09 kB
JavaScript
;
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