多功能工具库

29 阅读1分钟

封装了多个功能的函数,使用时可以直接调用,快速方便

    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);
};