canvas 畫出動態(tài)折線圖

canvas 是 html5 支持的一個標(biāo)簽纠拔,用于圖形的繪制乾颁。canvas 標(biāo)簽僅僅提供了圖形的容器,必須通過 js 腳本來繪制催享。

比如,繪制一個簡單的矩形:


矩形.png

<canvas id="myCanvas" width="200" height="100" style="border:1px solid #000000;"></canvas>

<script>
    var c=document.getElementById("myCanvas");
    var ctx=c.getContext("2d");
    ctx.fillStyle="#FF0000";
    ctx.fillRect(0,0,150,75);
</script>

這里就不做入門普及了哟绊,可直接搜索相關(guān) API 查看因妙。

比如,我要做一個折線的效果:


lineCanvas.png

首先票髓,獲取到畫布的上下文攀涵,getContext("2d");

然后洽沟,根據(jù)要顯示的數(shù)值以故,調(diào)用上下文的 lineTo() 方法畫出一條條的線,這些線連接起來就形成了趨勢線的效果裆操,


<!DOCTYPE html>
<html lang="en" >
<head>
<meta charset="utf-8">
<title>mycanvas</title>
</head>
<body>
    <div>
        <h2>line canvas</h2>
        <canvas id="myCanvas" width="300" height="200" style="border:1px solid #ccc;"></canvas>
    </div>

    <script src="jquery-1.7.2.min.js"></script>
    <script>
        window.onload = function () {
                  var arr = [40, 50, 30, 70, 80, 40, 90, 60, 80, 60, 69, 80, 80, 40, 50, 30, 70, 80, 40, 77, 80, 70, 60, 50, 80];
                  drawLine.minCurve(arr);
          }

         var drawLine = {};
   !function () {
        //求數(shù)組最大值
        Array.prototype.max = function () {
          var max = this[0];
          var len = this.length;
          for (var i = 1; i < len; i++) {
              if (this[i] > max) {
                max = this[i];
              }
            }
          return max;
        }

        function draw(arr) {
            var width = 300, height = 200;
            var maxV = arr.max();
            //計(jì)算y軸增量
          var yStep = height / maxV;
          console.log(maxV);
          var domCan = document.getElementById("myCanvas");
          var context = domCan.getContext("2d");
          context.beginPath();
          context.lineWidth = 2;
          context.strokeStyle = "#395B73";
          //context.moveTo(0, 0);//開始畫圖的位置
          var x_space = width / (arr.length - 1);//水平點(diǎn)的間隙像素
          //context.lineTo(15, 60); x表示水平向右延伸怒详,y表示垂直高度位置,從畫板最左上角(0,0)開始計(jì)算坐標(biāo)
           var xLen = 0;
            for (var i = 0; i < arr.length; i++) {
                var yValue = arr[i];//縱坐標(biāo)值
                xLen += x_space;
                var yPont = height - yValue * yStep;
              if (i == 0) {
                  xLen = 0;
                }
              var m = xLen + "," + yPont;
                  console.log(m);
                  context.lineTo(xLen, yPont);
                }
            context.stroke();
            context.closePath();
        }
        drawLine.minCurve = draw;
    }();
</script>
</body>
</html>

下面來個組合練習(xí)踪区,我要實(shí)現(xiàn)動態(tài)的效果昆烁,就是折線是動態(tài)生成的;這個也不難缎岗,就是設(shè)置一個定時器静尼,一段一段觸發(fā)就行了;那么,咱們再增加一點(diǎn)難度鼠渺,我要同時展示 4 個趨勢折線蜗元,4 個折線都與時間關(guān)聯(lián),也就是同一個時間點(diǎn)顯示 4 組不同的數(shù)據(jù)系冗,同時奕扣,還要支持時間段的切換,比如 1 分鐘和 10 分鐘不同的時間段掌敬;像下面這樣:

canvas.gif

你可以嘗試自己實(shí)現(xiàn)一下惯豆,這里提供一個前端的實(shí)現(xiàn)參考,前端代碼下載奔害。

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末楷兽,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子华临,更是在濱河造成了極大的恐慌芯杀,老刑警劉巖,帶你破解...
    沈念sama閱讀 223,002評論 6 519
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件雅潭,死亡現(xiàn)場離奇詭異揭厚,居然都是意外死亡,警方通過查閱死者的電腦和手機(jī)扶供,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 95,357評論 3 400
  • 文/潘曉璐 我一進(jìn)店門筛圆,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人椿浓,你說我怎么就攤上這事太援。” “怎么了扳碍?”我有些...
    開封第一講書人閱讀 169,787評論 0 365
  • 文/不壞的土叔 我叫張陵提岔,是天一觀的道長。 經(jīng)常有香客問我笋敞,道長碱蒙,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 60,237評論 1 300
  • 正文 為了忘掉前任液样,我火速辦了婚禮振亮,結(jié)果婚禮上巧还,老公的妹妹穿的比我還像新娘鞭莽。我一直安慰自己,他們只是感情好麸祷,可當(dāng)我...
    茶點(diǎn)故事閱讀 69,237評論 6 398
  • 文/花漫 我一把揭開白布澎怒。 她就那樣靜靜地躺著,像睡著了一般。 火紅的嫁衣襯著肌膚如雪喷面。 梳的紋絲不亂的頭發(fā)上星瘾,一...
    開封第一講書人閱讀 52,821評論 1 314
  • 那天,我揣著相機(jī)與錄音惧辈,去河邊找鬼琳状。 笑死,一個胖子當(dāng)著我的面吹牛盒齿,可吹牛的內(nèi)容都是我干的念逞。 我是一名探鬼主播,決...
    沈念sama閱讀 41,236評論 3 424
  • 文/蒼蘭香墨 我猛地睜開眼边翁,長吁一口氣:“原來是場噩夢啊……” “哼翎承!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起符匾,我...
    開封第一講書人閱讀 40,196評論 0 277
  • 序言:老撾萬榮一對情侶失蹤叨咖,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后啊胶,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體甸各,經(jīng)...
    沈念sama閱讀 46,716評論 1 320
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 38,794評論 3 343
  • 正文 我和宋清朗相戀三年焰坪,在試婚紗的時候發(fā)現(xiàn)自己被綠了痴晦。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 40,928評論 1 353
  • 序言:一個原本活蹦亂跳的男人離奇死亡琳彩,死狀恐怖誊酌,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情露乏,我是刑警寧澤碧浊,帶...
    沈念sama閱讀 36,583評論 5 351
  • 正文 年R本政府宣布,位于F島的核電站瘟仿,受9級特大地震影響箱锐,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜劳较,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 42,264評論 3 336
  • 文/蒙蒙 一驹止、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧观蜗,春花似錦臊恋、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,755評論 0 25
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至,卻和暖如春撤卢,著一層夾襖步出監(jiān)牢的瞬間环凿,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 33,869評論 1 274
  • 我被黑心中介騙來泰國打工放吩, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留智听,地道東北人。 一個月前我還...
    沈念sama閱讀 49,378評論 3 379
  • 正文 我出身青樓渡紫,卻偏偏與公主長得像瞭稼,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子腻惠,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 45,937評論 2 361

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

  • canvas元素的基礎(chǔ)知識 在頁面上放置一個canvas元素环肘,就相當(dāng)于在頁面上放置了一塊畫布,可以在其中進(jìn)行圖形的...
    oWSQo閱讀 10,312評論 0 19
  • 本文不允許任何形式的轉(zhuǎn)載集灌! 閱讀提示 本系列文章不適合以下人群閱讀悔雹,如果你無意點(diǎn)開此文,請對號入座欣喧,以免浪費(fèi)你寶貴...
    老霸王龍閱讀 700評論 0 0
  • 在Canvas中腌零,線段也是路徑中的一種,被稱之為線性路徑唆阿。在Canvas中繪制線性路徑主要用到moveTo(x,y...
    王叮叮當(dāng)當(dāng)響閱讀 2,942評論 0 2
  • Android中使用圖形處理引擎益涧,2D部分是android SDK內(nèi)部自己提供,3D部分是用Open GL ES ...
    溫暖的外星閱讀 3,185評論 2 10
  • ??HTML5 添加的最受歡迎的功能就是 元素。這個元素負(fù)責(zé)在頁面中設(shè)定一個區(qū)域浅辙,然后就可以通過 JavaScri...
    霜天曉閱讀 3,023評論 0 2