用canvas畫一個(gè)柱狀圖出來!

大家有沒有從canvas里面畫過一些東西呢障陶,這和平常畫畫一樣滋恬,畫畫之前得有畫板啊還得有各種顏色的畫筆,
這個(gè)也一樣抱究,但是吧都得在js里面實(shí)現(xiàn)這些東西恢氯;下面就讓我來教大家來用js來畫一張隨機(jī)的柱狀圖吧!

//首先需要在body里面放一個(gè)名為canvas的盒子然后給這個(gè)盒子寫上樣式但是必須在行內(nèi)寫要不然不行!
<body>
    <canvas id="c" width="800" height="800" style="margin-left: 200px; border: 1px red solid;"></canvas>
</body>
//接下來就是重點(diǎn)了
<script>
    data={
    x:["一月","二月","三月","四月","五月","六月"],
    y:["0","100","200","300","400","500","600","700","800","900","1000"],
    val:[],
    col:["red","green","blue","skyblue","limegreen","pink"]
    }
    while(data.val.length<6){
        data.val.push(Math.floor(Math.random()*(500-100+1)+100))//隨機(jī)數(shù)
    }
    var c= document.querySelector('#c');//獲取canvas
    var ctx = c.getContext('2d');//給這個(gè)變成2d畫板并賦予名字
    ctx.translate(50,700)//向下移動坐標(biāo)
    //y軸
    ctx.beginPath()
    ctx.moveTo(0,0);
    ctx.lineTo(0,-600);
    ctx.strokeStyle = 'red';
    ctx.lineWidth = '1'
    ctx.stroke()
    //x軸
    ctx.beginPath()
    ctx.moveTo(0,0);
    ctx.lineTo(600,0);
    ctx.strokeStyle = 'red';
    ctx.lineWidth = '1'   
    ctx.stroke();
    ctx.textAlign = 'center';
    ctx.textBaseline = 'middle'
    for(var i=0; i<data.val.length; i++){
        //把上面的數(shù)據(jù)畫入畫板
        ctx.beginPath()
        ctx.moveTo(70*(i+1),0)
        ctx.lineTo(70*(i+1),-data.val[i]/2)
        ctx.strokeStyle = data.col[i]
        ctx.lineWidth = '30';//加粗
        ctx.stroke();
        ctx.fillText(data.val[i],70*(i+1),-data.val[i]/2-10)//高度數(shù)據(jù)的填入
        ctx.fillText(data.x[i],70*(i+1),10)//月份寫入
    }
    //下面是給y軸寫出計(jì)量數(shù)勋拟,再給他畫上計(jì)量數(shù)的對應(yīng)點(diǎn)
    for(var i=0; i<data.y.length; i++){
        ctx.beginPath()
        ctx.moveTo(0,-50*i)
        ctx.lineTo(-5,-50*i)
        ctx.lineWidth = '2';
        ctx.strokeStyle = 'black'
        ctx.stroke();
        ctx.fillText(data.y[i],-20,-50*i)
    }
</script>

以上吧出來的效果可謂是驚人勋磕,如下圖:


柱狀圖.png

但是有個(gè)小不足就是得自己刷新頁面才能從新獲取數(shù)據(jù),但是可以在寫一個(gè)定時(shí)器用 setInterval 敢靡,然后用setTimeout在
三秒后讓他清除定時(shí)器clearInterval挂滓;就很舒適在設(shè)置兩個(gè)按鈕之類的就perfect了

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市啸胧,隨后出現(xiàn)的幾起案子赶站,更是在濱河造成了極大的恐慌,老刑警劉巖纺念,帶你破解...
    沈念sama閱讀 221,888評論 6 515
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件贝椿,死亡現(xiàn)場離奇詭異,居然都是意外死亡柠辞,警方通過查閱死者的電腦和手機(jī)团秽,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 94,677評論 3 399
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來叭首,“玉大人习勤,你說我怎么就攤上這事”焊瘢” “怎么了图毕?”我有些...
    開封第一講書人閱讀 168,386評論 0 360
  • 文/不壞的土叔 我叫張陵,是天一觀的道長眷唉。 經(jīng)常有香客問我予颤,道長,這世上最難降的妖魔是什么冬阳? 我笑而不...
    開封第一講書人閱讀 59,726評論 1 297
  • 正文 為了忘掉前任蛤虐,我火速辦了婚禮,結(jié)果婚禮上肝陪,老公的妹妹穿的比我還像新娘驳庭。我一直安慰自己,他們只是感情好氯窍,可當(dāng)我...
    茶點(diǎn)故事閱讀 68,729評論 6 397
  • 文/花漫 我一把揭開白布饲常。 她就那樣靜靜地躺著,像睡著了一般狼讨。 火紅的嫁衣襯著肌膚如雪贝淤。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 52,337評論 1 310
  • 那天政供,我揣著相機(jī)與錄音播聪,去河邊找鬼朽基。 笑死,一個(gè)胖子當(dāng)著我的面吹牛犬耻,可吹牛的內(nèi)容都是我干的踩晶。 我是一名探鬼主播执泰,決...
    沈念sama閱讀 40,902評論 3 421
  • 文/蒼蘭香墨 我猛地睜開眼枕磁,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了术吝?” 一聲冷哼從身側(cè)響起计济,我...
    開封第一講書人閱讀 39,807評論 0 276
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎排苍,沒想到半個(gè)月后沦寂,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 46,349評論 1 318
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡淘衙,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 38,439評論 3 340
  • 正文 我和宋清朗相戀三年传藏,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片彤守。...
    茶點(diǎn)故事閱讀 40,567評論 1 352
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡毯侦,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出具垫,到底是詐尸還是另有隱情侈离,我是刑警寧澤,帶...
    沈念sama閱讀 36,242評論 5 350
  • 正文 年R本政府宣布筝蚕,位于F島的核電站卦碾,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏起宽。R本人自食惡果不足惜洲胖,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,933評論 3 334
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望坯沪。 院中可真熱鬧绿映,春花似錦、人聲如沸屏箍。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,420評論 0 24
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽赴魁。三九已至卸奉,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間颖御,已是汗流浹背榄棵。 一陣腳步聲響...
    開封第一講書人閱讀 33,531評論 1 272
  • 我被黑心中介騙來泰國打工凝颇, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人疹鳄。 一個(gè)月前我還...
    沈念sama閱讀 48,995評論 3 377
  • 正文 我出身青樓拧略,卻偏偏與公主長得像,于是被迫代替她去往敵國和親瘪弓。 傳聞我的和親對象是個(gè)殘疾皇子垫蛆,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 45,585評論 2 359

推薦閱讀更多精彩內(nèi)容