JS实现随机颜色的3种方法与颜色格式的转化
JS实现随机颜色的3种方法与颜色格式的转化
前言
相信大家都知道在前端的颜色表示方式有多种,一种是以3个或6个十六进制的数子表示,一种是RGB的数字形式,还有一种是直接以颜色的英文来表示。这三种都是不支持透明色的。所以还有RGBA的表式方式,在RGB的的基础上加入了Alpha透明,使网页可以展现更加复杂绚丽的效果。
随机颜色
在平时的码农日常中,经常会用到求随机颜色的地方,下面是我总结的几种简单的实现随机颜色的方式:
十六进制格式(#000000-#FFFFFF)
第一种是比较简单的方法,这种方法是先随机生成ffffff以内16进制数,然后判断位数,少于6位的用while循环在前面加0,凑够6位。
| 1 2 3 4 5 6 7 | functionrandomHexColor() { //随机生成十六进制颜色 varhex = Math.floor(Math.random() * 16777216).toString(16); //生成ffffff以内16进制数 while(hex.length < 6) { //while循环判断hex位数,少于6位前面加0凑够6位  hex = '0'+ hex; } return'#'+ hex; //返回‘#'开头16进制颜色} | 
还有一种比较方便但是比较难懂的方法,需要用到位运算。
| 1 2 3 | functionrandomHexColor() { //随机生成十六进制颜色 return'#'+ ('00000'+ (Math.random() * 0x1000000 << 0).toString(16)).substr(-6);} | 
按执行顺序可以分为以下六步:
- 先执行Math.random()* 0x1000000,其中0x1000000=0xffffff+1,因为Math.random()取不到1,所以+1,这样就会生成一个1-16777216(不包含)以内的浮点数。
- 然后执行<<0,这是取整运算,去掉后面的小数点。这时为一个16777216(不包含)以内的十进制数。
- 之后执行.toString(16),把十进制数转化为六位以下16进制数。
- 再后执行'00000'+,这时因为之前生成的16进制数最少可能仅一位,在前面加上5个0。
- 最后执行.substr(-6),是去从-6开始的后面所有字符串,也就是最后6位数。
- 前面加上#并retuen。
RGB格式
| 1 2 3 4 5 6 | functionrandomRgbColor() { //随机生成RGB颜色 varr = Math.floor(Math.random() * 256); //随机生成256以内r值 varg = Math.floor(Math.random() * 256); //随机生成256以内g值 varb = Math.floor(Math.random() * 256); //随机生成256以内b值 return`rgb(${r},${g},${b})`; //返回rgb(r,g,b)格式颜色} | 
RGBA格式
| 1 2 3 4 5 6 7 | functionrandomRgbaColor() { //随机生成RGBA颜色 varr = Math.floor(Math.random() * 256); //随机生成256以内r值 varg = Math.floor(Math.random() * 256); //随机生成256以内g值 varb = Math.floor(Math.random() * 256); //随机生成256以内b值 varalpha = Math.random(); //随机生成1以内a值 return`rgb(${r},${g},${b},${alpha})`; //返回rgba(r,g,b,a)格式颜色} | 
颜色格式转化
在编码过程中,经常会遇到要将颜色格式相互转化的问题,其中十六进制格式和RGB格式是可以相互转化的,但是RGBA格式由于多了前两者没有的Alpha透明属性,所以和前两者转化会丢失Alpha值,不建议进行转化,下面是我的颜色转化的方法:
十六进制转为RGB
| 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 | functionhex2Rgb(hex) { //十六进制转为RGB varrgb = []; // 定义rgb数组 if(/^\#[0-9A-F]{3}$/i.test(hex)) { //判断传入是否为#三位十六进制数  let sixHex = '#';  hex.replace(/[0-9A-F]/ig, function(kw) {   sixHex += kw + kw; //把三位16进制数转化为六位  });  hex = sixHex; //保存回hex } if(/^#[0-9A-F]{6}$/i.test(hex)) { //判断传入是否为#六位十六进制数  hex.replace(/[0-9A-F]{2}/ig, function(kw) {   rgb.push(eval('0x'+ kw)); //十六进制转化为十进制并存如数组  });  return`rgb(${rgb.join(',')})`; //输出RGB格式颜色 } else{  console.log(`Input ${hex} is wrong!`);  return'rgb(0,0,0)'; }} | 
RGB转为十六进制
| 1 2 3 4 5 6 7 8 9 10 11 12 13 14 | functionrgb2Hex(rgb) { if(/^rgb\((\d{1,3}\,){2}\d{1,3}\)$/i.test(rgb)) { //test RGB  varhex = '#'; //定义十六进制颜色变量  rgb.replace(/\d{1,3}/g, function(kw) { //提取rgb数字   kw = parseInt(kw).toString(16); //转为十六进制   kw = kw.length < 2 ? 0 + kw : kw; //判断位数,保证两位   hex += kw; //拼接  });  returnhex; //返回十六进制 } else{  console.log(`Input ${rgb} is wrong!`);  return'#000'; //输入格式错误,返回#000 }} | 
总结
以上就是这篇文文章的全部内容了,也是我在平时遇到的关于颜色处理方面的问题,大家有遇到什么奇怪的问题和更好的解决方法可以交流沟通一下。希望本文的内容对大家的学习或者工作能带来一定的帮助。
JS实现随机颜色的3种方法与颜色格式的转化的更多相关文章
- [BS-19]更改UITextField的placeholder文字颜色的5种方法
		更改UITextField的placeholder文字颜色的5种方法 想要达到的目标是:一个页面上有多个UITextField,当用户聚焦某textField时,该文本框的placeholder的文字 ... 
- (转)在网页中JS函数自动执行常用三种方法
		原文:http://blog.sina.com.cn/s/blog_6f6b4c3c0100nxx8.html 在网页中JS函数自动执行常用三种方法 在网页中JS函数自动执行常用三种方法 在HTML中 ... 
- js function定义函数的4种方法
		js function定义函数的4种方法 1.最基本的作为一个本本分分的函数声明使用. 复制代码代码如下: 复制代码代码如下: function func(){} 或 var func=functio ... 
- js中数组去重的几种方法
		js中数组去重的几种方法 1.遍历数组,一一比较,比较到相同的就删除后面的 function unique(arr){ ... 
- 利用JS提交表单的几种方法和验证(必看篇)
		第一种方式:表单提交,在form标签中增加onsubmit事件来判断表单提交是否成功 ? 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 <scr ... 
- Android(java)学习笔记106:Android设置文本颜色的4种方法
		1. Android设置文本颜色的4种方法: (1)利用系统自带的颜色类: tv.setTextColor(android.graphics.Color.RED); (2)数字颜色表示: tv.set ... 
- js刷新页面有哪几种方法
		js刷新页面有哪几种方法 一.总结 一句话总结:location属性的reload方法即可:document.location.reload() 1.页面刷新有哪常见的8种方法? 1,history. ... 
- js字符串转换为数字的三种方法。(转换函数)(强制类型转换)(利用js变量弱类型转换)
		js字符串转换为数字的三种方法.(转换函数)(强制类型转换)(利用js变量弱类型转换) 一.总结 js字符串转换为数字的三种方法(parseInt("1234blue"))(Num ... 
- 在网页中JS函数自动执行常用三种方法
		在网页中JS函数自动执行常用三种方法 在HTML中的Head区域中,有如下函数: <SCRIPT LANGUAGE="JavaScript"> function ... 
随机推荐
- HDFS v1.0学习笔记
			hdfs是一个用于存储大文件的分布式文件系统,是apache下的一个开源项目,使用java实现.它的设计目标是可以运行在廉价的设备上,运行在大多数的系统平台上,高可用,高容错,易于扩展. 适合场景 存 ... 
- eclipse 安装egit插件
			一.Eclipse上安装GIT插件EGit Eclipse的版本eclipse-java-helios-SR2-win32.zip(在Eclipse3.3版本找不到对应的 EGit插件,无法安装) E ... 
- 异常:”未处理System.TypeLoadException“
			1.问题由来: 在敲系统时原来的已有的类都能正常的执行,可是当加入一个新的实体类CancelCard的时候系统执行时显示错误例如以下: watermark/2/text/aHR0cDovL2J ... 
- DetachedCriteria的使用
			设计上能够灵活的依据 Criteria 的特点来方便地进行查询条件的组装.如今对 Hibernate的Criteria 的使用方法进行总结: Hibernate 设计了 CriteriaSpec ... 
- php訪问控制
			訪问控制通过keywordpublic,protected和private来实现. 被定义为公有的类成员能够在不论什么地方被訪问.被定义为受保护的类成员则能够被其自身以及其子类和父类訪问.被定义为私有 ... 
- swift 2.0 语法  循环
			//: Playground - noun: a place where people can play import UIKit /*: for循环 * 基本用法和OC一致 * 条件表达式必须是bo ... 
- C++运算符重载的妙用
			运算符重载(Operator overloading)是C++重要特性之中的一个,本文通过列举标准库中的运算符重载实例,展示运算符重载在C++里的妙用.详细包含重载operator<<,o ... 
- TwoSum leetcode
			class Solution { public: vector<int> twoSum(vector<int>& nums, int target) { vector& ... 
- Ubuntu12.04LTS 安装 eclipse
			首先安装JDK,参考:Ubuntu12.04.3LTS安装Oracle Java 7 然后安装eclipse: 安装方法一:通过命令行/Software Center下载Ubuntu源中的Eclips ... 
- js字符转处理
			那几个函数的应用: <script> //全局变量删不掉,而全局属性能删掉 var a=123; function aa () { b=321; delete b; } aa(); del ... 
