From f26f29d84e0a68831a6af14dab3eec5500496d2e Mon Sep 17 00:00:00 2001 From: spring <2396852758@qq.com> Date: 星期三, 28 五月 2025 16:48:52 +0800 Subject: [PATCH] 初始化项目 --- uview-ui/libs/function/colorGradient.js | 134 ++++++++++++++++++++++++++++++++++++++++++++ 1 files changed, 134 insertions(+), 0 deletions(-) diff --git a/uview-ui/libs/function/colorGradient.js b/uview-ui/libs/function/colorGradient.js new file mode 100644 index 0000000..eca30a2 --- /dev/null +++ b/uview-ui/libs/function/colorGradient.js @@ -0,0 +1,134 @@ +/** + * 姹備袱涓鑹蹭箣闂寸殑娓愬彉鍊� + * @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); //杞崲涓簉gb鏁扮粍妯″紡 + 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 sR = (endR - startR) / step; //鎬诲樊鍊� + let sG = (endG - startG) / step; + let sB = (endB - startB) / step; + let colorArr = []; + for (let i = 0; i < step; i++) { + //璁$畻姣忎竴姝ョ殑hex鍊� + let hex = rgbToHex('rgb(' + Math.round((sR * i + startR)) + ',' + Math.round((sG * i + startG)) + ',' + Math.round((sB * + i + startB)) + ')'); + colorArr.push(hex); + } + return colorArr; +} + +// 灏唄ex琛ㄧず鏂瑰紡杞崲涓簉gb琛ㄧず鏂瑰紡(杩欓噷杩斿洖rgb鏁扮粍妯″紡) +function hexToRgb(sColor, str = true) { + let reg = /^#([0-9a-fA-f]{3}|[0-9a-fA-f]{6})$/; + sColor = sColor.toLowerCase(); + if (sColor && reg.test(sColor)) { + if (sColor.length === 4) { + let sColorNew = "#"; + for (let i = 1; i < 4; i += 1) { + sColorNew += sColor.slice(i, i + 1).concat(sColor.slice(i, i + 1)); + } + sColor = sColorNew; + } + //澶勭悊鍏綅鐨勯鑹插�� + let sColorChange = []; + for (let i = 1; i < 7; i += 2) { + sColorChange.push(parseInt("0x" + sColor.slice(i, i + 2))); + } + if(!str) { + return sColorChange; + } else { + return `rgb(${sColorChange[0]},${sColorChange[1]},${sColorChange[2]})`; + } + } else if (/^(rgb|RGB)/.test(sColor)) { + let arr = sColor.replace(/(?:\(|\)|rgb|RGB)*/g, "").split(",") + return arr.map(val => Number(val)); + } else { + return sColor; + } +}; + +// 灏唕gb琛ㄧず鏂瑰紡杞崲涓篽ex琛ㄧず鏂瑰紡 +function rgbToHex(rgb) { + let _this = rgb; + let reg = /^#([0-9a-fA-f]{3}|[0-9a-fA-f]{6})$/; + if (/^(rgb|RGB)/.test(_this)) { + let aColor = _this.replace(/(?:\(|\)|rgb|RGB)*/g, "").split(","); + let strHex = "#"; + for (let i = 0; i < aColor.length; i++) { + let hex = Number(aColor[i]).toString(16); + hex = String(hex).length == 1 ? 0 + '' + hex : hex; // 淇濊瘉姣忎釜rgb鐨勫�间负2浣� + if (hex === "0") { + hex += hex; + } + strHex += hex; + } + if (strHex.length !== 7) { + strHex = _this; + } + return strHex; + } else if (reg.test(_this)) { + let aNum = _this.replace(/#/, "").split(""); + if (aNum.length === 6) { + return _this; + } else if (aNum.length === 3) { + let numHex = "#"; + for (let i = 0; i < aNum.length; i += 1) { + numHex += (aNum[i] + aNum[i]); + } + return numHex; + } + } else { + return _this; + } +} + + +/** +* JS棰滆壊鍗佸叚杩涘埗杞崲涓簉gb鎴杛gba,杩斿洖鐨勬牸寮忎负 rgba锛�255锛�255锛�255锛�0.5锛夊瓧绗︿覆 +* sHex涓轰紶鍏ョ殑鍗佸叚杩涘埗鐨勮壊鍊� +* alpha涓簉gba鐨勯�忔槑搴� +*/ +function colorToRgba(color, alpha = 0.3) { + color = rgbToHex(color) + // 鍗佸叚杩涘埗棰滆壊鍊肩殑姝e垯琛ㄨ揪寮� + var reg = /^#([0-9a-fA-f]{3}|[0-9a-fA-f]{6})$/ + /* 16杩涘埗棰滆壊杞负RGB鏍煎紡 */ + let sColor = color.toLowerCase() + if (sColor && reg.test(sColor)) { + if (sColor.length === 4) { + var sColorNew = '#' + for (let i = 1; i < 4; i += 1) { + sColorNew += sColor.slice(i, i + 1).concat(sColor.slice(i, i + 1)) + } + sColor = sColorNew + } + // 澶勭悊鍏綅鐨勯鑹插�� + var sColorChange = [] + for (let i = 1; i < 7; i += 2) { + sColorChange.push(parseInt('0x' + sColor.slice(i, i + 2))) + } + // return sColorChange.join(',') + return 'rgba(' + sColorChange.join(',') + ',' + alpha + ')' + } + else { + return sColor + } +} + +export default { + colorGradient, + hexToRgb, + rgbToHex, + colorToRgba +} \ No newline at end of file -- Gitblit v1.9.3