chowa
Version:
UI component library based on React
143 lines (142 loc) • 4.44 kB
JavaScript
/**
* @license chowa v1.1.3
*
* Copyright (c) Chowa Techonlogies Co.,Ltd.(http://www.chowa.cn).
*
* This source code is licensed under the MIT license found in the
* LICENSE file in the root directory of this source tree.
*/
;
Object.defineProperty(exports, "__esModule", { value: true });
exports.default = {
rect(ele) {
return ele.getBoundingClientRect();
},
pageOffset() {
let top = 0;
let left = 0;
if (typeof window.pageYOffset !== 'undefined') {
top = window.pageYOffset;
left = window.pageXOffset;
}
else if (typeof document.compatMode !== 'undefined' && document.compatMode !== 'BackCompat') {
top = document.documentElement.scrollTop;
left = document.documentElement.scrollLeft;
}
else if (typeof document.body !== 'undefined') {
top = document.body.scrollTop;
left = document.body.scrollLeft;
}
return {
top,
left,
width: window.innerWidth + left,
height: window.innerHeight + top
};
},
scrollTop(ele) {
if (ele === window) {
return document.body.scrollTop || document.documentElement.scrollTop;
}
else {
return ele.scrollTop;
}
},
offset(ele) {
const selfReact = this.rect(ele);
const pageOffset = this.pageOffset();
return {
width: selfReact.width,
height: selfReact.height,
top: selfReact.top + pageOffset.top,
left: selfReact.left + pageOffset.left
};
},
attr(ele, property, val) {
if (typeof property === 'object') {
for (const key in property) {
if (typeof property[key] === 'string' || typeof property[key] === 'number') {
ele.setAttribute(key, property[key]);
}
}
}
else if (typeof property === 'string') {
if (val) {
ele.setAttribute(property, val);
}
else {
return ele.getAttribute(property);
}
}
return null;
},
removeAttr(ele, property) {
ele.removeAttribute(property);
},
addClass(ele, classNames) {
const orginClasses = this.attr(ele, 'class');
let splitClasses = [];
if (orginClasses !== null) {
splitClasses = orginClasses.split(/\s+/);
}
classNames = Array.isArray(classNames) ? classNames : [classNames];
classNames = classNames.concat(splitClasses);
ele.setAttribute('class', classNames.join(' '));
},
removeClass(ele, classNames) {
const orginClasses = this.attr(ele, 'class');
if (orginClasses === null) {
return;
}
const splitClasses = orginClasses.split(/\s+/);
classNames = Array.isArray(classNames) ? classNames : [classNames];
classNames.forEach((name) => {
splitClasses.splice(splitClasses.indexOf(name), 1);
});
ele.setAttribute('class', splitClasses.join(' '));
},
css(ele, property, val) {
if (typeof property === 'object') {
for (const key in property) {
if (Object.prototype.hasOwnProperty.call(ele.style, key)) {
ele.style[key] = property[key];
}
}
}
else if (typeof property === 'string') {
if (val || val === 0) {
ele.style[property] = val;
}
else {
return window.getComputedStyle(ele, null)[property];
}
}
return null;
},
removeStyle(ele, propertys) {
if (!Array.isArray(propertys)) {
propertys = [propertys];
}
if (!propertys.length) {
return;
}
propertys.forEach((property) => {
ele.style.removeProperty(property);
});
},
on(ele, ev, cb) {
ele.addEventListener(ev, cb, {
once: false,
capture: false,
passive: false
});
},
off(ele, ev, cb) {
ele.removeEventListener(ev, cb, {
capture: false
});
},
hasClass(ele, className) {
return ele.getAttribute('class').split(/\s+/).includes(className);
}
};