123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270 |
- let color = [
- 'red',
- 'purplered',
- 'purple',
- 'bluepurple',
- 'aquablue',
- 'blue',
- 'indigo',
- 'cyan',
- 'teal',
- 'green',
- 'yellowgreen',
- 'lime',
- 'yellow',
- 'orangeyellow',
- 'orange',
- 'orangered',
- 'brown',
- 'grey',
- 'gray'
- ]
- // 酷炫颜色的数量
- const COOL_BG_COLOR_COUNT = 16
- /**
- * 获取速立保配色颜色列表
- */
- function getTuniaoColorList() {
- return color
- }
- /**
- * 获取指定类型的随机颜色对应的类
- * @param {String} type 颜色类型
- */
- function getRandomColorClass(type = 'bg') {
- const index = Math.floor(Math.random() * color.length)
- const colorValue = color[index]
- return 'tn-' + type + '-' + colorValue
- }
- /**
- * 随机获取酷炫背景对应的类
- */
- function getRandomCoolBgClass() {
- const index = (Math.random() * COOL_BG_COLOR_COUNT) + 1
- return 'tn-cool-bg-color-' + Math.floor(index)
- }
- /**
- * 根据传入的值获取内部背景颜色类
- *
- * @param {String} backgroundColor 背景颜色信息
- */
- function getBackgroundColorInternalClass(backgroundColor = '') {
- if (!backgroundColor) return ''
-
- if (['tn-bg', 'tn-dynamic-bg', 'tn-main-gradient', 'tn-cool-bg'].some(item => {
- return backgroundColor.includes(item)
- })) {
- return backgroundColor
- }
- return ''
- }
- /**
- * 根据传入的值获取背景颜色样式
- *
- * @param {String} backgroundColor 背景颜色信息
- */
- function getBackgroundColorStyle(backgroundColor = '') {
- if (!backgroundColor) return ''
-
- if (!backgroundColor.startsWith('tn-') || ['#', 'rgb', 'rgba'].some(item => {
- return backgroundColor.includes(item)
- })) {
- return backgroundColor
- }
- return ''
- }
- /**
- * 根据传入的值获取内部字体颜色类
- *
- * @param {String} fontColor 背景颜色信息
- */
- function getFontColorInternalClass(fontColor = '') {
- if (!fontColor) return ''
-
- if (['tn-color'].some(item => {
- return fontColor.includes(item)
- })) {
- return fontColor
- }
- return ''
- }
- /**
- * 根据传入的值获取字体颜色样式
- *
- * @param {String} fontColor 背景颜色信息
- */
- function getFontColorStyle(fontColor = '') {
- if (!fontColor) return ''
-
- if (!fontColor.startsWith('tn-') || ['#', 'rgb', 'rgba'].some(item => {
- return fontColor.includes(item)
- })) {
- return fontColor
- }
- return ''
- }
- /**
- * 求两个颜色之间的渐变值
- *
- * @param {String} startColor 开始颜色
- * @param {String} endColor 结束颜色
- * @param {Number} step 颜色等分的份额
- */
- function colorGradient(startColor = 'rgb(0, 0, 0)', endColor='rgb(255, 255, 255)', step = 10) {
- let startRGB = hexToRGB(startColor, false)
- let startR = startRGB[0]
- let startG = startRGB[1]
- let startB = startRGB[2]
-
- let endRGB = hexToRGB(endColor, false)
- let endR = endRGB[0]
- let endG = endRGB[1]
- let endB = endRGB[2]
-
- // 求差值
- let R = (endR - startR) / step
- let G = (endG - startG) / step
- let B = (endB - startB) / step
-
- let colorArr = []
- for (let i = 0; i < step; i++) {
- // 计算每一步的hex值
- let hex = rgbToHex(`rgb(${Math.round(R * i + startR)}, ${Math.round(G * i + startG)}, ${Math.round(B * i + startB)})`)
- colorArr.push(hex)
- }
- return colorArr
- }
- /**
- * 将hex的颜色表示方式转换为rgb表示方式
- *
- * @param {String} color 颜色
- * @param {Boolean} str 是否返回字符串
- * @return {Array|String} rgb的值
- */
- function hexToRGB(color, str = true) {
- let reg = /^#([0-9a-fA-F]{3}|[0-9a-fA-F]{6})$/
-
- color = color.toLowerCase()
- if (color && reg.test(color)) {
- // #000 => #000000
- if (color.length === 4) {
- let colorNew = '#'
- for (let i = 1; i < 4; i++) {
- colorNew += color.slice(i, i + 1).concat(color.slice(i, i + 1))
- }
- color = colorNew
- }
- // 处理六位的颜色值
- let colorChange = []
- for (let i = 1; i < 7; i += 2) {
- colorChange.push(parseInt("0x" + color.slice(i, i + 2)))
- }
- if (!str) {
- return colorChange
- } else {
- return `rgb(${colorChange[0]}, ${colorChange[1]}, ${colorChange[2]})`
- }
- } else if (/^(rgb|RGB)/.test(color)) {
- let arr = color.replace(/(?:\(|\)|rgb|RGB)*/g, "").split(',')
- return arr.map(item => Number(item))
- } else {
- return color
- }
- }
- /**
- * 将rgb的颜色表示方式转换成hex表示方式
- *
- * @param {Object} rgb rgb颜色值
- */
- function rgbToHex(rgb) {
- let reg = /^#([0-9a-fA-F]{3}|[0-9a-fA-F]{6})$/
- if (/^(rgb|RGB)/.test(rgb)) {
- let color = rgb.replace(/(?:\(|\)|rgb|GRB)*/g, "").split(',')
- let strHex = '#'
- for (let i = 0; i < color.length; i++) {
- let hex = Number(color[i]).toString(16)
- // 保证每个值否是两位数
- hex = String(hex).length === 1 ? 0 + '' + hex: hex
- if (hex === '0') {
- hex += hex
- }
- strHex += hex
- }
- if (strHex.length !== 7) {
- strHex = rgb
- }
- return strHex
- } else if (reg.test(rgb)) {
- let num = rgb.replace(/#/, '').split('')
- if (num.length === 6) {
- return rgb
- } else if (num.length === 3) {
- let numHex = '#'
- for (let i = 0; i < num.length; i++) {
- numHex += (num[i] + num[i])
- }
- return numHex
- }
- } else {
- return rgb
- }
- }
- /**
- * 将传入的颜色值转换为rgba字符串
- *
- * @param {String} color 颜色
- * @param {Number} alpha 透明度
- */
- function colorToRGBA(color, alpha = 0.3) {
- color = rgbToHex(color)
- // 十六进制颜色值的正则表达式
- let reg = /^#([0-9a-fA-F]{3}|[0-9a-fA-F]{6})$/
-
- color = color.toLowerCase()
- if (color && reg.test(color)) {
- // #000 => #000000
- if (color.length === 4) {
- let colorNew = '#'
- for (let i = 1; i < 4; i++) {
- colorNew += color.slice(i, i + 1).concat(color.slice(i, i + 1))
- }
- color = colorNew
- }
- // 处理六位的颜色值
- let colorChange = []
- for (let i = 1; i < 7; i += 2) {
- colorChange.push(parseInt("0x" + color.slice(i, i + 2)))
- }
- return `rgba(${colorChange[0]}, ${colorChange[1]}, ${colorChange[2]}, ${alpha})`
- } else {
- return color
- }
- }
- export default {
- COOL_BG_COLOR_COUNT: COOL_BG_COLOR_COUNT,
- getTuniaoColorList,
- getRandomColorClass,
- getRandomCoolBgClass,
- getBackgroundColorInternalClass,
- getBackgroundColorStyle,
- getFontColorInternalClass,
- getFontColorStyle,
- colorGradient,
- hexToRGB,
- rgbToHex,
- colorToRGBA
- }
|