封装了多个功能的函数,使用时可以直接调用,快速方便
export const getStyle = (obj, attr) => {
if (obj.currentStyle) {
return obj.currentStyle[attr];
}
return window.getComputedStyle(obj, null)[attr];
};
export const getScroll = () => {
if (window.pageYOffset != undefined) {
return {
left: window.pageXOffset,
top: window.pageYOffset,
};
} else if (document.compatMode === "CSS1Compat") {
return {
left: document.documentElement.scrollLeft,
top: document.documentElement.scrollTop,
};
}
return {
left: document.body.scrollLeft,
top: document.body.scrollTop,
};
};
export const offset = (obj) => {
let o = { left: obj.offsetLeft, top: obj.offsetTop };
while (obj.offsetParent) {
obj = obj.offsetParent;
o.left += obj.offsetLeft;
o.top += obj.offsetTop;
}
return o;
};
export const randomNumber = (num1, num2) => {
let max = num1 > num2 ? num1 : num2;
let min = num1 < num2 ? num1 : num2;
return parseInt(Math.random() * (max - min + 1)) + min;
};
export const randomColor = () => {
let strColor = "#";
for (let i = 0; i < 6; i++) {
strColor += parseInt(Math.random() * 16).toString(16);
}
return strColor;
};
export const animate = (obj, json, callback) => {
clearInterval(obj.timer);
obj.timer = setInterval(() => {
let flag = true;
for (let attr in json) {
let current = 0,
target = 0,
setp = 0;
if (attr == "opacity") {
current = parseFloat(getStyle(obj, attr)) * 100;
target = parseFloat(json[attr]) * 100;
} else {
current = parseInt(getStyle(obj, attr));
target = parseInt(json[attr]);
}
setp = (target - current) / 10;
setp = setp > 0 ? Math.ceil(setp) : Math.floor(setp);
if (attr == "opacity") {
obj.style.opacity = (current + setp) / 100;
} else if (attr == "zIndex") {
obj.style.zIndex = target;
} else {
obj.style[attr] = current + setp + "px";
}
if (target != current) {
flag = false;
}
}
if (flag) {
clearInterval(obj.timer);
if (typeof callback == "function") {
callback.call(undefined); //bind,call,apply
}
}
},20);
};