JS隨機(jī)顏色有很多地方要用到:比如大家看到很多標(biāo)簽連接都是五顏六色,。那就需要到這個(gè)了,。下面開始: 方法思路總共有二,。一是準(zhǔn)備一組漂亮的候選顏色,,二是隨機(jī)生成顏色,。 實(shí)現(xiàn)1 復(fù)制代碼 代碼如下: var getRandomColor = function(){ return '#' + (function(color){ return (color += '0123456789abcdef'[Math.floor(Math.random()*16)]) && (color.length == 6) ? color : arguments.callee(color); })(''); } 隨機(jī)生成6個(gè)字符然后再串到一起,,閉包調(diào)用自身與三元運(yùn)算符讓程序變得內(nèi)斂,,初心者應(yīng)該好好學(xué)習(xí)這種寫法,。 實(shí)現(xiàn)2 復(fù)制代碼 代碼如下: var getRandomColor = function(){ return (function(m,s,c){ return (c ? arguments.callee(m,s,c-1) : '#') + s[m.floor(m.random() * 16)] })(Math,'0123456789abcdef',5) } 把Math對(duì)象,用于生成hex顏色值的字符串提取出來,,并利用第三個(gè)參數(shù)來判斷是否還繼續(xù)調(diào)用自身,。 實(shí)現(xiàn)3 復(fù)制代碼 代碼如下: 以下為引用的內(nèi)容: Array.prototype.map = function(fn, thisObj) { var scope = thisObj || window; 這個(gè)要求我們對(duì)數(shù)組做些擴(kuò)展,,map將返回一個(gè)數(shù)組,然后我們?cè)儆胘oin把它的元素串成字符,。 實(shí)現(xiàn)4 復(fù)制代碼 代碼如下: 以下為引用的內(nèi)容: var getRandomColor = function(){ return '#'+Math.floor(Math.random()*16777215).toString(16); 這個(gè)實(shí)現(xiàn)非常逆天,,雖然有點(diǎn)小bug。我們知道hex顏色值是從#000000到#ffffff,,后面那六位數(shù)是16進(jìn)制數(shù),,相當(dāng)于“0x000000”到“0xffffff”。這實(shí)現(xiàn)的思路是將hex的最大值ffffff先轉(zhuǎn)換為10進(jìn)制,,進(jìn)行random后再轉(zhuǎn)換回16進(jìn)制,。我們看一下,如何得到16777215 這個(gè)數(shù)值的,。 復(fù)制代碼 代碼如下: 以下為引用的內(nèi)容: <!doctype html> 實(shí)現(xiàn)5 復(fù)制代碼 代碼如下: 以下為引用的內(nèi)容: var getRandomColor = function(){ return '#'+(Math.random()*0xffffff<<0).toString(16); 基本實(shí)現(xiàn)4的改進(jìn),,利用左移運(yùn)算符把0xffffff轉(zhuǎn)化為整型。這樣就不用記16777215了,。由于左移運(yùn)算符的優(yōu)先級(jí)比不上乘號(hào),,因此隨機(jī)后再左移,連Math.floor也不用了,。 實(shí)現(xiàn)6 復(fù)制代碼 代碼如下: 以下為引用的內(nèi)容: var getRandomColor = function(){ return '#'+(function(h){ 修正上面版本的bug(無法生成純白色與hex位數(shù)不足問題),。0x1000000相當(dāng)0xffffff+1,確保會(huì)抽選到0xffffff,。在閉包里我們處理hex值不足5位的問題,,直接在未位補(bǔ)零。 實(shí)現(xiàn)7 復(fù)制代碼 代碼如下: 以下為引用的內(nèi)容: var getRandomColor = function(){ return '#'+('00000'+(Math.random()*0x1000000<<0).toString(16)).substr(-6); 這次在前面補(bǔ)零,,連遞歸檢測(cè)也省了,。 實(shí)戰(zhàn)一下: 復(fù)制代碼 代碼如下: 以下為引用的內(nèi)容: <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www./TR/html4/strict.dtd"> window.onload = function () { function drawSector(cx,cy,r,paper,oc,startAngle){ }; 如對(duì)本文有疑問,請(qǐng)?zhí)峤坏浇涣魃鐓^(qū),,廣大熱心網(wǎng)友會(huì)為你解答?。? 點(diǎn)擊進(jìn)入社區(qū) |
|