动态加载js

const loadScript = (src) => {
    const s = document.createElement('script');
    s.type = 'text/javascript';
    s.async = true;
    s.src = src;
    const t = document.getElementsByTagName('script')[0];
    t.parentNode.insertBefore(s, t);
}

判断el元素是否有某个class

const hasClass = (el, className) => {
    let reg = new RegExp('(^|\\s)' + className + '(\\s|$)')
    return reg.test(el.className)
}

为el元素添加某个class

const addClass = (el, className) => {
    if (hasClass(el, className)) {
        return
    }
    let newClass = el.className.split(' ')
    newClass.push(className)
    el.className = newClass.join(' ')
}

为el元素移除某个class

const removeClass = (el, className) => {
    if (!hasClass(el, className)) {
        return
    }
    let reg = new RegExp('(^|\\s)' + className + '(\\s|$)', 'g')
    el.className = el.className.replace(reg, ' ')
}

获取滚动的坐标

const getScrollPosition = (el = window) => ({
    x: el.pageXOffset !== undefined ? el.pageXOffset : el.scrollLeft,
    y: el.pageYOffset !== undefined ? el.pageYOffset : el.scrollTop
});

页面滚动到顶部

const scrollToTop = () => {
    const c = document.documentElement.scrollTop || document.body.scrollTop;
    if (c > 0) {
        window.requestAnimationFrame(scrollToTop);
        window.scrollTo(0, c - c / 8);
    }
}

el元素是否在视口范围内

const elementIsVisibleInViewport = (el, partiallyVisible = false) => {
    const { top, left, bottom, right } = el.getBoundingClientRect();
    const { innerHeight, innerWidth } = window;
    return partiallyVisible
        ? ((top > 0 && top < innerHeight) || (bottom > 0 && bottom < innerHeight)) &&
        ((left > 0 && left < innerWidth) || (right > 0 && right < innerWidth))
        : top >= 0 && left >= 0 && bottom <= innerHeight && right <= innerWidth;
}

去除字符串空格

  1. 去除所有空格
str.replace(/\s+/g, "")
  1. 去除前后空格
str.replace(/(^\s*)|(\s*$)/g, "")
  1. 去除前空格
str.replace(/(^\s*)/g, "")
  1. 去除后空格
str.replace(/(\s*$)/g, "")

首字母大写

str.replace(/\b\w+\b/g, function (word) {
    return word.substring(0, 1).toUpperCase() + word.substring(1).toLowerCase();
})

首字母小写

str.replace(/\b\w+\b/g, function (word) {
    return word.substring(0, 1).toLowerCase() + word.substring(1).toUpperCase();
})

字母大小写转换

str.split('').map(function (word) {
   if (/[a-z]/.test(word)) {
       return word.toUpperCase();
   } else {
       return word.toLowerCase()
   }
}).join('')

颜色16进制转RGB、RGBA字符串

export const colorToRGB = (val, opacity) => {
   // 16进制颜色值校验规则
   var pattern = /^(#?)[a-fA-F0-9]{6}$/; 
   
   // 判断是否有设置不透明度
   var isOpacity = typeof opacity == 'number'; 
   
   // 如果值不符合规则返回空字符
   if (!pattern.test(val)) { 
       return '';
   }
   
   // 如果有#号先去除#号
   var v = val.replace(/#/, ''); 
   var rgbArr = [];
   var rgbStr = '';

   for (var i = 0; i < 3; i++) {
       var item = v.substring(i * 2, i * 2 + 2);
       var num = parseInt(item, 16);
       rgbArr.push(num);
   }

   rgbStr = rgbArr.join();
   rgbStr = 'rgb' + (isOpacity ? 'a' : '') + '(' + rgbStr + (isOpacity ? ',' + opacity : '') + ')';
   return rgbStr;
}
文章作者: 小森森
版权声明: 本站所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来自 小森森博客
源码 JavaScript
喜欢就支持一下吧
打赏
微信 微信
支付宝 支付宝