源码工具函数一

阅读源码经常会发现一些比较好用的工具函数或者, 或者经常会用到的一些工具函数, 这是源码阅读发现工具函数的第一篇文章。

# 获取当前浏览器滚动条的宽度

业务页面中,部分容器可能需要精准的获取当前滚动条的宽度, 以防出现滚动条对当前容器造成的一些样式影响。

export function getScrollBarSize(fresh) {
  if (!getScrollBarSize.cached) {
    const inner = document.createElement('div');
    inner.style.width = '100%';
    inner.style.height = '200px';

    const outer = document.createElement('div');
    const outerStyle = outer.style;
    outerStyle.postiion = 'absolute';
    outerStyle.left = 0;
    outerStyle.top = 0;
    outerStyle.pointEvents = 'none';
    outerStyle.visibility = 'hidden';
    outerStyle.width = '200px';
    outerStyle.height = '150px';
    outerStyle.overflow = 'hidden';
    outer.appendChild(inner);
    document.body.appendChild(outer);
    const widthContained = inner.offsetWidth;
    outer.style.overflow = 'scroll';
    let widthScroll= inner.offsetWidth;
    if (widthContained === widthScroll) {
      widthScroll = outer.clientWidth;
    }
    document.body.removeChild(outer);
    getScrollBarSize.cached = widthContained - widthScroll;
    return getScrollBarSize.cached;
  }
  return getScrollBarSize.cached
}

# 函数或变量名称规范的替换

常见的有驼峰与连字符的互相转换

// 驼峰转连字符
function camelcaseToHyphen (str) {
    return str.replace(/([a-z])([A-Z])/g, '$1-$2').toLowerCase();
}
// 连字符转驼峰 'good-job' -> 'goodJob' 'good_job' -> 'goodJob'
function camelCase(name) {
  const SPECIAL_CHARS_REGEXP = /([\-\_]+(.))/g;
  return name.replace(SPECIAL_CHARS_REGEXP, function(_, separator, letter, offset) {
      return offset ? letter.toUpperCase() : letter;
  })
}

# 字符串首字母大写

function firstUpperCase(str) {
    return str.toString()[0].toUpperCase() + str.toString().slice(1);
}

# 数据类型判断

function is(obj) {
  const toString = Object.prototype.toString;
  return toString.call(obj).slice(8, -1).toLowerCase();
}

上次更新: 2023/03/20, 16:56:52
最近更新
01
在js中实现响应式(原理参考solidjs)
03-21
02
使用VSCode插件快速导航代码库:类似autojump的跳转功能
03-20
03
react事件系统
11-07
更多文章>