十六进制透明颜色 转换成 RGBA 颜色(腾讯地图 与 微信地图组件所需颜色格式不同)

本文档介绍了在将微信小程序转换为H5应用过程中遇到的地图组件颜色格式不兼容问题。小程序使用十六进制颜色加透明度,而腾讯地图JSAPI不支持这种格式。为解决此问题,提供了一个JavaScript工具函数,用于将十六进制颜色(包括透明度)转换为RGBA格式,便于在腾讯地图中使用。同时,展示了函数的使用案例和参数校验,确保透明度参数在有效范围内。
摘要由CSDN通过智能技术生成

情况说明

之前写了个小程序项目,后来客户要想把它对接到浙里办、浙政钉上,就需要将其改成 h5 应用,这过程可以说是成堆成堆的问题(好在基本都找到了替代方案,遇到的问题也都顺利解决了,没有卡太久…)

小程序转 h5,那之前用的地图组件肯定就不能用了,得另寻他路,下面就是用腾讯地图替代地图组件遇到的问题之一:填充颜色格式不兼容

想当初把颜色搞成十六进制带透明还花了点心思的…现在???

在这里插入图片描述

原因

写微信小程序的时候,颜色得用十六进制加透明度表示…

而转到腾讯地图 JS API 的时候,颜色不支持十六进制透明度…

小程序文档

在这里插入图片描述

腾讯地图 JS API

在这里插入图片描述

腾讯地图 JS API 使用十六进制颜色会报错…

在这里插入图片描述

网上搜的在线工具多半是 十六进制颜色转 rgb 颜色的,并不能附带透明度

手动加上透明度出来的颜色会有偏差

  • 偏差部分是透明度那几位,然后对照颜色表再转换回 rgba 里的 a 透明度,会比较繁琐
  • 直接一点一点的调 rgba 的 a 透明度也会比较麻烦
  • 你可以使用下面这个方法来转换颜色,会更加直观些(可以看看我提供的案例,你就能了解怎么用、有什么特别的地方了)

十六进制颜色转RGBA颜色 实现方案

定义一个工具函数用来做颜色转换

let changeHexToRgba = (str, alpha = 1) => {
  const REGCOLOR = /^#([A-Fa-f0-9]{3}|[A-Fa-f0-9]{6}|[A-Fa-f0-9]{8})$/;
  const ISRGBA = REGCOLOR.test(str);
  if (ISRGBA === false) {
    throw Error("颜色参数不合法");
  }
  const ISALPHA = typeof parseFloat(alpha) == "number" && parseFloat(alpha) <= 1 && parseFloat(alpha) >= 0
  if (ISALPHA == false) {
    throw Error("透明度参数不合法");
  }
  // 去掉#号  
  const colorStr = str.slice(1);
  const len = colorStr.length;
  if (len === 3) {
    const color = colorStr
    .split("")
    .map(ele => parseInt(`0x${ele.repeat(2)}`))
    .join(",");
    return `rgba(${color},${alpha})`;
  }
  const color = colorStr
  .match(/[A-z0-9]{2}/g)
  .map(ele => parseInt(`0x${ele}`));
  if (len === 6) {
    return `rgba(${color.join(",")},${alpha})`;
  }
  if (len === 8) {
    const opacity = (color.pop() / 255).toFixed(2);
    return `rgba(${color.slice(0, 3).join(",")}, ${opacity})`;
  }
}

使用案例

/* 十六进制带透明度的颜色传入透明度参数 alpha 不会生效,会自动转换十六进制颜色中的透明度  */
changeHexToRgba("#c7826073", 0.6)
// "rgba(199,130,96, 0.45)"

/* 十六进制带透明度的颜色会自动转换为 rgba 值,透明度也会转换,无需传入透明度参数 */
changeHexToRgba("#c7826073")
// "rgba(199,130,96, 0.45)"

/* 十六进制无透明度颜色如果不传透明度参数,会自动采用默认值1 为不透明 */
changeHexToRgba("#c78263")
// "rgba(199,130,99,1)"

/* 十六进制无透明度颜色如果传入透明度参数,则会采用传入的数值作为透明度 */
changeHexToRgba("#c78263", 0.5)
// "rgba(199,130,99,0.5)"

/* 也可以支持十六进制颜色简写 */
changeHexToRgba("#fff", 0.5)
// "rgba(255,255,255,0.5)"
changeHexToRgba("#000", 0.5)
// "rgba(0,0,0,0.5)"

/* 传入的透明度参数 alpha 需要大于等于0,且小于等于1,否则会报错 */
changeHexToRgba("#000", "1.2")
/*
Uncaught Error: 透明度参数不合法
    at changeHexToRgba (<anonymous>:9:13)
    at <anonymous>:1:1
    */
/* 传入的透明度参数 alpha 可以是 0-1 的数字,也可以是值为 0-1 的字符串 */
changeHexToRgba("#000", "0.2")
// "rgba(0,0,0,0.2)"
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

RealizeInnerSelf丶

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值