关于element-ui换肤功能源码中的getThemeCluster函数

发布于 2022-09-07 22:58:50 字数 1866 浏览 21 评论 0

getThemeCluster(theme) {
      const tintColor = (color, tint) => {
        let red = parseInt(color.slice(0, 2), 16)
        let green = parseInt(color.slice(2, 4), 16)
        let blue = parseInt(color.slice(4, 6), 16)
        if (tint === 0) { // when primary color is in its rgb space
          return [red, green, blue].join(',')
        } else {
          red += Math.round(tint * (255 - red))
          green += Math.round(tint * (255 - green))
          blue += Math.round(tint * (255 - blue))
          red = red.toString(16)
          green = green.toString(16)
          blue = blue.toString(16)
          return `#${red}${green}${blue}`
        }
      }
      const shadeColor = (color, shade) => {
        let red = parseInt(color.slice(0, 2), 16)
        let green = parseInt(color.slice(2, 4), 16)
        let blue = parseInt(color.slice(4, 6), 16)
        red = Math.round((1 - shade) * red)
        green = Math.round((1 - shade) * green)
        blue = Math.round((1 - shade) * blue)
        red = red.toString(16)
        green = green.toString(16)
        blue = blue.toString(16)
        return `#${red}${green}${blue}`
      }
      const clusters = [theme]
      for (let i = 0; i <= 9; i++) {
        clusters.push(tintColor(theme, Number((i / 10).toFixed(2))))
      }
      clusters.push(shadeColor(theme, 0.1))
      return clusters
    }

源码地址
此函数的参数theme是一个色值,比如说409EFF。然后函数一进来定义了tintColor与shadeColor两个函数,然后for循环了10次依次执行clusters.push(tintColor(theme, Number((i / 10).toFixed(2)))),最后再执行clusters.push(shadeColor(theme, 0.1)),return clusters。从断点调试的结果来看,最后生成的clusters是包含一系列色值的数组。

我不明白tintColor与shadeColor到底做了什么事,生成的那一堆色值有什么联系。传入的tint与shade参数又是什么意思,为什么要循环10次。

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

风吹雪碎 2022-09-14 22:58:50

假如 theme 是 '红色'
有些按钮是根据主题色计算出来的 '浅红色'
tint函数就是计算出来这个浅红色的方法
大概是下面这样的
红色 * 透明度(0.2) = 浅红色
循环10次就是计算出是个不同程度的浅红色
建议看一下less 文档

擦肩而过的背影 2022-09-14 22:58:50

我也不明白啊

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文