亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 編程 > JavaScript > 正文

js隨機顏色代碼的多種實現方式

2019-11-20 22:47:06
字體:
來源:轉載
供稿:網友

JS隨機顏色有很多地方要用到:比如大家看到很多標簽連接都是五顏六色。那就需要到這個了。下面開始:      

方法思路總共有二。一是準備一組漂亮的候選顏色,二是隨機生成顏色。

實現1

復制代碼 代碼如下:

var getRandomColor = function(){   

  return  '#' +   
    (function(color){   
    return (color +=  '0123456789abcdef'[Math.floor(Math.random()*16)])   
      && (color.length == 6) ?  color : arguments.callee(color);   
  })('');   
}

隨機生成6個字符然后再串到一起,閉包調用自身與三元運算符讓程序變得內斂,初心者應該好好學習這種寫法。

實現2

復制代碼 代碼如下:

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對象,用于生成hex顏色值的字符串提取出來,并利用第三個參數來判斷是否還繼續調用自身。

實現3

復制代碼 代碼如下:

以下為引用的內容:

Array.prototype.map = function(fn, thisObj) {

  var scope = thisObj || window;
  var a = [];
  for ( var i=0, j=this.length; i < j; ++i ) {
    a.push(fn.call(scope, this[i], i, this));
  }
  return a;
};
var getRandomColor = function(){
  return '#'+'0123456789abcdef'.split('').map(function(v,i,a){
    return i>5 ? null : a[Math.floor(Math.random()*16)] }).join('');
}


這個要求我們對數組做些擴展,map將返回一個數組,然后我們再用join把它的元素串成字符。

實現4

復制代碼 代碼如下:

以下為引用的內容:

var getRandomColor = function(){

  return '#'+Math.floor(Math.random()*16777215).toString(16);
}


這個實現非常逆天,雖然有點小bug。我們知道hex顏色值是從#000000到#ffffff,后面那六位數是16進制數,相當于“0x000000”到“0xffffff”。這實現的思路是將hex的最大值ffffff先轉換為10進制,進行random后再轉換回16進制。我們看一下,如何得到16777215 這個數值的。
復制代碼 代碼如下:

以下為引用的內容:

<!doctype html>
<meta charset="utf-8"/>
<meta http-equiv="X-UA-Compatible" content="IE=8"/>
<title>hex的最大值</title>
<script type="text/javascript" charset="utf-8">
  window.onload = function () {
     alert(parseInt("0xffffff",16).toString(10));
  };
</script>
<div id="text"></div>


實現5
復制代碼 代碼如下:

以下為引用的內容:

var getRandomColor = function(){

  return '#'+(Math.random()*0xffffff<<0).toString(16);
}


基本實現4的改進,利用左移運算符把0xffffff轉化為整型。這樣就不用記16777215了。由于左移運算符的優先級比不上乘號,因此隨機后再左移,連Math.floor也不用了。

實現6

復制代碼 代碼如下:

以下為引用的內容:

var getRandomColor = function(){

  return '#'+(function(h){
    return new Array(7-h.length).join("0")+h
  })((Math.random()*0x1000000<<0).toString(16))
}


修正上面版本的bug(無法生成純白色與hex位數不足問題)。0x1000000相當0xffffff+1,確保會抽選到0xffffff。在閉包里我們處理hex值不足5位的問題,直接在未位補零。

實現7

復制代碼 代碼如下:

以下為引用的內容:

var getRandomColor = function(){

  return '#'+('00000'+(Math.random()*0x1000000<<0).toString(16)).substr(-6);
}


這次在前面補零,連遞歸檢測也省了。

實戰一下:

復制代碼 代碼如下:

以下為引用的內容:

<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd">
<html lang="zh-cn">
  <head>
    <meta http-equiv="Content-Type" content="text/html; charset=utf-8">
    <title>初級餅圖</title>
    <script src="http://bloghighlighter.googlecode.com/files/raphael-min.js" type="text/javascript" ></script>
    <script type="text/javascript" charset="utf-8">
      var getRandomColor = function(){
        return '#'+('00000'+(Math.random()*0x1000000<<0).toString(16)).substr(-6);
      }

window.onload = function () {
        var paper = Raphael("canvas", 700, 700);
        paper.rect(0, 0, 640, 480,10).attr({fill: "#F2F1D7",stroke: "none"});//設置畫板

function drawSector(cx,cy,r,paper,oc,startAngle){
          var angleplus = 360 * oc / 100,//360度乘以40%
          startAngle = startAngle || 0,
          endAngle =startAngle+angleplus,
          rad = Math.PI / 180,
          x1 = cx + r * Math.cos(-startAngle * rad),
          x2 = cx + r * Math.cos(-endAngle * rad),
          y1 = cy + r * Math.sin(-startAngle * rad),
          y2 = cy + r * Math.sin(-endAngle * rad);
          var path = ["M", cx, cy, "L", x1, y1, "A", r, r, 0, +(endAngle - startAngle > 180), 0, x2, y2, "z"],

          path = path.join(" ");
          paper.path({fill:getRandomColor()},path);
          return endAngle
        }
        var ocs = [40,25,17,10,8];
        for(var i=0,l=ocs.length,startAngle;i<l;i++){
          startAngle = drawSector(300,300,100,paper,ocs[i],startAngle);
        }

};
    </script>
    <style type="text/css" media="screen">
      #canvas {
        width: 700px;
        height: 700px;
      }
    </style>
    <title>初級2324234餅圖</title>
  </head>
  <body>
    <p>初級23232餅圖</p>
    <div id="canvas"></div>
  </body>
</html>

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
国产在线拍揄自揄视频不卡99| 68精品久久久久久欧美| 色播久久人人爽人人爽人人片视av| 国产成人精品视频| 欧美精品xxx| 91热精品视频| 日韩av电影在线免费播放| xxxxxxxxx欧美| 国产精品a久久久久久| 亚洲а∨天堂久久精品喷水| 欧美精品免费在线| 日韩欧美国产成人| 亚洲欧美综合v| 96国产粉嫩美女| 一本一本久久a久久精品牛牛影视| 日韩中文字幕在线播放| 久久成人人人人精品欧| 奇米成人av国产一区二区三区| 亚洲欧美色婷婷| 亚洲a成v人在线观看| 久久久久女教师免费一区| 国产丝袜一区二区三区免费视频| 日本久久久久久久久久久| 久久人人爽亚洲精品天堂| 欧美成人一区在线| 57pao精品| 亚洲第一免费网站| 久久精品影视伊人网| 中文字幕亚洲一区二区三区| 精品久久中文字幕久久av| 国产第一区电影| 欧美精品日韩三级| 亚洲男人av电影| 国产成人激情视频| 久久精品中文字幕电影| 国产精品av在线| 欧美日韩亚洲激情| 7777精品视频| 国产+成+人+亚洲欧洲| 欧美午夜精品久久久久久浪潮| 欧美专区在线视频| 福利视频导航一区| 九九热这里只有精品免费看| 欧美在线视频在线播放完整版免费观看| 欧美日韩日本国产| 在线观看免费高清视频97| 91色琪琪电影亚洲精品久久| 在线看日韩欧美| 亚洲另类欧美自拍| 亚洲国产成人在线视频| 日韩av在线网站| 久久精品中文字幕一区| 久久好看免费视频| 久久久久久高潮国产精品视| 中文字幕九色91在线| 2019亚洲日韩新视频| 亚洲色图美腿丝袜| 成人黄色在线免费| 国产精品普通话| 97视频com| 精品视频在线观看日韩| 久久精品国产2020观看福利| 亚洲精品国偷自产在线99热| 亚洲天堂网站在线观看视频| 日韩在线观看网址| 亚洲一区二区三区sesese| 精品二区三区线观看| 国产999精品视频| 国产精品免费一区二区三区都可以| 久久久久九九九九| 久久久噜噜噜久久久| 亚洲欧美日韩天堂一区二区| 日韩一区二区三区在线播放| 亚洲一区二区三区香蕉| 欧美激情网友自拍| 亚洲欧美日韩视频一区| 亚洲韩国青草视频| 粉嫩老牛aⅴ一区二区三区| 午夜精品国产精品大乳美女| 国产精品亚洲网站| 国产做受69高潮| 国产精品香蕉av| 亚洲综合成人婷婷小说| 成人黄色生活片| 亚洲欧美日韩精品久久亚洲区| 蜜月aⅴ免费一区二区三区| 亚洲国产精品中文| 色偷偷亚洲男人天堂| 亚洲欧美一区二区三区四区| 亚洲免费视频在线观看| 久久成人国产精品| 在线丨暗呦小u女国产精品| 全亚洲最色的网站在线观看| 欧美日韩中文字幕综合视频| 久久久免费在线观看| 久久久久女教师免费一区| 亚洲综合色激情五月| 国产成+人+综合+亚洲欧洲| 亚洲日本成人女熟在线观看| 久99九色视频在线观看| 成人疯狂猛交xxx| 97在线视频免费观看| 日韩免费在线电影| 国产欧美一区二区| 91在线观看免费高清| 日韩免费在线看| 在线亚洲男人天堂| 国产精品69精品一区二区三区| 亚洲午夜久久久影院| 午夜剧场成人观在线视频免费观看| 国产亚洲激情在线| 亚洲精品视频在线观看视频| 久久久在线免费观看| www国产精品视频| 日本久久久a级免费| 亚洲欧美激情在线视频| 国产欧美日韩中文字幕在线| 69av成年福利视频| 91久久久久久久久久久久久| 亚洲精品在线91| 久久久久国产精品一区| 国产精品第一第二| 日韩欧美一区二区三区久久| 欧美xxxx18性欧美| 久久中文精品视频| 亚洲久久久久久久久久| 欧美国产视频一区二区| 日产精品久久久一区二区福利| 国产一区二区三区毛片| 国产亚洲欧洲在线| 欧美理论电影在线播放| 亚洲天堂av电影| 欧美国产亚洲视频| 国产成人精品视| 国产一区深夜福利| 38少妇精品导航| 日韩欧美第一页| 亚洲自拍偷拍在线| 成人激情电影一区二区| 日韩在线中文字幕| 97久久久久久| 97不卡在线视频| 日韩高清欧美高清| 色综合天天综合网国产成人网| 91免费版网站入口| 亚洲第一区第二区| 日韩精品视频在线免费观看| 狠狠躁夜夜躁人人躁婷婷91| 精品无人区乱码1区2区3区在线| 黑人巨大精品欧美一区二区一视频| 中文字幕欧美日韩精品| 日韩av一卡二卡| 欧美精品一区二区免费| 日韩亚洲成人av在线| 777777777亚洲妇女| 美女撒尿一区二区三区| 国语自产精品视频在线看| 中文字幕精品网| 成人黄色大片在线免费观看| 亚洲精品久久久久中文字幕欢迎你| 亚洲深夜福利网站| 国产91ⅴ在线精品免费观看| 亚洲国产精品一区二区三区| 欧美色视频日本高清在线观看|