目次
はじめに
エフェクト
分析
実装
canvas定義
座標軸を描く
によって決まります。
Interval、set
が非常に便利であることがわかります。ヒストグラム上でタイトルを覆うことはできません。ただし、一部のタイトルは上部にあり、一部は下部にあるため、書ききれない場合があります。
总结
ホームページ ウェブフロントエンド H5 チュートリアル キャンバスダイナミックチャート

キャンバスダイナミックチャート

May 28, 2017 am 10:42 AM
canvas

はじめに

canvas 強力な機能により、HTML5 の非常に重要な部分となりますが、それが何であるかについては、ここで紹介する必要はありません。ビジュアル チャートは、キャンバスの強力な機能を表現したものの 1 つです。

現在、Canvas を使用して実装される成熟したチャート プラグインが多数あり、Chart.js などは美しくクールなチャートを作成でき、ほぼすべてのチャート実装をカバーします。

ヒストグラムを描きたいときもありますが、自分で書くのは面倒ですし、他の人のプラグインを使用するのも面倒です。最後に、Baidu を開いてコードをコピーし、貼り付けて修正します。自分で手に取ってみてもいいかもしれません。

エフェクト

アニメーションエフェクト画像は表示できません。一番下に移動してデモアドレスを見つけることができます

キャンバスダイナミックチャート

分析

はい、このチャートはxy軸、データバー、タイトルで構成されています。

  • Axis: moveTo() と lineTo() を使用して実装できます

  • Text: fillText() を使用して実装できます

  • Rectangle: fillRect() を使用して

を実装できますどうやらそうではないようです そんなに難しいことではありません。

実装

canvas定義


<canvas id="canvas" width="600" height="500"></canvas>
ログイン後にコピー


canvasタグは単なるコンテナであり、描画の実際の実装はJavaScriptです。

座標軸を描く

座標軸は2本の横線であり、キャンバスの最も基礎的な知識です。 E ctx.beginpath() から新しいパスを開始します

  • CTX.LI

    New
  • Idth = 1 線の幅を設定します
  • CTX.Strokestyle = '#000000' 線の色を設定します

  • ctx.moveTo( x,y) は線の始点を定義します

  • ctx.lineTo(x1,y1) は線の終点を定義します

  • 最後に ctx.ストローク() は始点と終点を結びますline

  • var canvas = document.getElementById(&#39;canvas&#39;);var ctx = canvas.getContext(&#39;2d&#39;);var width = canvas.width;var height = canvas.height;var padding = 50;       // 坐标轴到canvas边框的边距,留边距写文字ctx.beginPath();ctx.lineWidth = 1;// y轴线ctx.moveTo(padding + 0.5, height - padding + 0.5);ctx.lineTo(padding + 0.5, padding + 0.5);ctx.stroke();// x轴线ctx.moveTo(padding + 0.5, height - padding + 0.5);ctx.lineTo(width - padding + 0.5, height - padding + 0.5);ctx.stroke();
    ログイン後にコピー


座標点を描画します


y軸上の座標点をいくつ自分で定義するか y軸上の座標値を計算するには、データの最大値を取得する必要があります。軸。 x 軸の点は受信データの長さによって決まり、座標値は受信データの xAxis

属性

によって決まります。

座標値はテキストであり、ctx.fillText(value, x, y)によってテキストで埋められます。valueはテキスト値、x yは値の座標です

  • ctx.textAlign='center'テキストの中央揃えを設定します

  • ctx.fillStyle='#000000' テキストの塗りつぶしの色を設定します

  • var yNumber = 5;                                                // y轴的段数var yLength = Math.floor((height - padding * 2) / yNumber);     // y轴每段的真实长度var xLength = Math.floor((width - padding * 2) / data.length);  // x轴每段的真实长度ctx.beginPath();ctx.textAlign = &#39;center&#39;;ctx.fillStyle = &#39;#000000&#39;;ctx.strokeStyle = &#39;#000000&#39;;// x轴刻度和值for (var i = 0; i < data.length; i++) {
        var xAxis = data[i].xAxis;
        var xlen = xLength * (i + 1);
        ctx.moveTo(padding + xlen, height - padding);
        ctx.lineTo(padding + xlen, height - padding + 5);
        ctx.stroke();                                       // 画轴线上的刻度
        ctx.fillText(xAxis, padding + xlen - xLength / 2, height - padding + 15);   // 填充文字}// y轴刻度和值for (var i = 0; i < yNumber; i++) {
        var y = yFictitious * (i + 1);
        var ylen = yLength * (i + 1);
        ctx.moveTo(padding, height - padding - ylen);
        ctx.lineTo(padding - 5, height - padding - ylen);
        ctx.stroke();
        ctx.fillText(y, padding - 10, height - padding - ylen + 5);}
    ログイン後にコピー


列アニメーション


次に、データを高さ方向に表示する必要があります。ここにはアニメーション効果があり、列は 0 から対応する値に変化します。キャンバスにアニメーションを実装するには、

set

Interval、set

Time

out、requestAnimationFrameを使用できます。 requestAnimationFrameはタイミング時間を自分で設定する必要はなく、ブラウザの描画に従います。こうすることでコマ落ちがなく、自然に滑らかになります。 requestAnimationFrameは当初IE10以降のみをサポートしていましたが、互換性のある記述方法によりIE6にも対応できます。


function looping() {
    looped = requestAnimationFrame(looping);
    if(current < 100){      
    // current 用来计算当前柱状的高度占最终高度的百分之几,通过不断循环实现柱状上升的动画
        current = (current + 3) > 100 ? 100 : (current + 3);
        drawAnimation();
    }else{
        window.cancelAnimationFrame(looped);
        looped = null;
    }}function drawAnimation() {
    for(var i = 0; i < data.length; i++) {
        var x = Math.ceil(data[i].value * current / 100 * yRatio);
        var y = height - padding - x;
        ctx.fillRect(padding + xLength * (i + 0.25), y, xLength/2, x);
        // 保存每个柱状的信息
        data[i].left = padding + xLength / 4 + xLength * i;
        data[i].top = y;
        data[i].right = padding + 3 * xLength / 4 + xLength * i;
        data[i].bottom = height - padding;
    }}looping();
ログイン後にコピー



Cylinder は、ctx.fillRect(x, y, width, height) によって実装される長方形を描画します。x y は長方形の左上隅の座標、幅高さです。は長方形の幅と高さ、単位はピクセルです

  • ctx.fillStyle='#1E9FFF' 塗りつぶしの色を設定します

  • この時点で、基本的なヒストグラムが完成します。次に、タイトルを追加します。

  • タイトル

タイトルを配置するには、早朝に定義したパディング

内側マージン

が非常に便利であることがわかります。ヒストグラム上でタイトルを覆うことはできません。ただし、一部のタイトルは上部にあり、一部は下部にあるため、書ききれない場合があります。

変数

positionを設定して位置を決定し、描画します。これはシンプルです。

// 标题if(title){                      // 也不一定有标题
    ctx.textAlign = &#39;center&#39;;
    ctx.fillStyle = &#39;#000000&#39;;  // 颜色,也可以不用写死,个性化嘛
    ctx.font = &#39;16px Microsoft YaHei&#39;
    if(titlePosition === &#39;bottom&#39; && padding >= 40){
        ctx.fillText(title,width/2,height-5)    }else{
        ctx.fillText(title,width/2,padding/2)    }}
ログイン後にコピー


マウスの動きを聞く

イベント

一部のグラフでは、マウスを上に動かすと現在の列の色が変わり、マウスを動かすと元の色に戻ります。 。ここでは、マウスの位置が円柱状の領域内にあるときにイベントがトリガーされるように、mouseover イベントをリッスンする必要があります。

那我怎么知道在柱状里啊,发现在 drawAnimation() 里会有每个柱状的坐标,那我干脆把坐标给保存到 data 里。那么鼠标在柱状里的条件应该是:

  • ev.offsetX > data[i].left

  • ev.offsetX < data[i].right

  • ev.offsetY > data[i].top

  • ev.offsetY < data[i].bottom


canvas.addEventListener(&#39;mousemove&#39;,function(ev){
    var ev = ev||window.event;
    for (var i=0;i<data.length;i++){
    for (var i=0;i<data.length;i++){
        if(ev.offsetX > data[i].left &&
        ev.offsetX < data[i].right &&
        ev.offsetY > data[i].top &&
        ev.offsetY < data[i].bottom){
            console.log(&#39;我在第&#39;+i+&#39;个柱状里。&#39;);
        }
    }})
ログイン後にコピー


总结

为了更方便的使用,封装成构造函数。通过

var chart = new sBarChart(&#39;canvas&#39;,data,{
    title: &#39;xxx公司年度盈利&#39;,   // 标题
    titleColor: &#39;#000000&#39;,      // 标题颜色
    titlePosition: &#39;top&#39;,       // 标题位置
    bgColor: &#39;#ffffff&#39;,         // 背景色
    fillColor: &#39;#1E9FFF&#39;,       // 柱状填充色
    axisColor: &#39;#666666&#39;,       // 坐标轴颜色
    contentColor: &#39;#a5f0f6&#39;     // 内容横线颜色
});
ログイン後にコピー

参数可配置,很简单就生成一个个性化的柱状图。代码地址:canvas-demo

最后加上折线图、饼图、环形图,完整封装成sChart.js插件,插件地址:sChart.js

以上がキャンバスダイナミックチャートの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。

ホットAIツール

Undresser.AI Undress

Undresser.AI Undress

リアルなヌード写真を作成する AI 搭載アプリ

AI Clothes Remover

AI Clothes Remover

写真から衣服を削除するオンライン AI ツール。

Undress AI Tool

Undress AI Tool

脱衣画像を無料で

Clothoff.io

Clothoff.io

AI衣類リムーバー

Video Face Swap

Video Face Swap

完全無料の AI 顔交換ツールを使用して、あらゆるビデオの顔を簡単に交換できます。

ホットツール

メモ帳++7.3.1

メモ帳++7.3.1

使いやすく無料のコードエディター

SublimeText3 中国語版

SublimeText3 中国語版

中国語版、とても使いやすい

ゼンドスタジオ 13.0.1

ゼンドスタジオ 13.0.1

強力な PHP 統合開発環境

ドリームウィーバー CS6

ドリームウィーバー CS6

ビジュアル Web 開発ツール

SublimeText3 Mac版

SublimeText3 Mac版

神レベルのコード編集ソフト(SublimeText3)

キャンバスを使用している学校はどこですか? キャンバスを使用している学校はどこですか? Aug 18, 2023 pm 05:59 PM

Canvas を使用している学校には、スタンフォード大学、MIT、コロンビア大学、カリフォルニア大学バークレー校などが含まれます。詳細な紹介: 1. スタンフォード大学は、主要なオンライン学習プラットフォームとして Canvas を使用しています。スタンフォード大学の教師と学生は、Canvas を使用してコースの内容を管理および伝達し、オンライン ディスカッション、課題の提出、試験などの機能を通じて学習します。2. マ州Polytechnic Institute と MIT もオンライン学習管理システムとして Canvas を使用しており、Canvas プラットフォームを通じてコース管理を行っています。3. コロンビア大学など。

キャンバス矢印プラグインとは何ですか? キャンバス矢印プラグインとは何ですか? Aug 21, 2023 pm 02:14 PM

キャンバス矢印プラグインには、1. シンプルで使いやすい API を備え、カスタムの矢印効果を作成できる Fabric.js、2. 矢印を描画する機能を提供し、さまざまな矢印を作成できる Konva.js が含まれます。スタイル; 3. 豊富なグラフィックス処理機能を提供し、さまざまな矢印効果を実現できる Pixi.js; 4. 矢印のスタイルやアニメーションを簡単に作成および制御できる Two.js; 5. さまざまな矢印効果を作成できる Arrow.js ; 6. 大まかな.jsでは、手描きの矢印などが作成できます。

キャンバスクロックの詳細は何ですか? キャンバスクロックの詳細は何ですか? Aug 21, 2023 pm 05:07 PM

キャンバス時計の詳細には、時計の外観、目盛り、デジタル時計、時針、分針、秒針、中心点、アニメーション効果、その他のスタイルなどが含まれます。詳細な紹介: 1. 時計の外観、キャンバスを使用して時計の外観として円形の文字盤を描画し、文字盤のサイズ、色、境界線などのスタイルを設定できます; 2. 目盛り線、目盛り線を描画します。位置; 3. デジタル時計、現在の時と分を示すために文字盤にデジタル時計を描くことができます; 4. 時針、分針、秒針など。

キャンバス フレームワークを学び、一般的に使用されるキャンバス フレームワークについて詳しく説明します キャンバス フレームワークを学び、一般的に使用されるキャンバス フレームワークについて詳しく説明します Jan 17, 2024 am 11:03 AM

Canvas フレームワークを探索する: 一般的に使用される Canvas フレームワークを理解するには、特定のコード例が必要です。 はじめに: Canvas は HTML5 で提供される描画 API であり、これを通じて豊富なグラフィックスやアニメーション効果を実現できます。描画の効率と利便性を向上させるために、多くの開発者がさまざまな Canvas フレームワークを開発しました。この記事では、一般的に使用される Canvas フレームワークをいくつか紹介し、読者がこれらのフレームワークの使用方法をより深く理解できるように、具体的なコード例を示します。 1.EaselJSフレームワークEa

uniapp は、キャンバスを使用してチャートやアニメーション効果を描画する方法を実装します。 uniapp は、キャンバスを使用してチャートやアニメーション効果を描画する方法を実装します。 Oct 18, 2023 am 10:42 AM

キャンバスを使用して uniapp でチャートやアニメーション効果を描画する方法には、特定のコード例が必要です。 1. はじめに モバイル デバイスの普及に伴い、モバイル端末上でさまざまなチャートやアニメーション効果を表示する必要があるアプリケーションがますます増えています。 uniapp は、Vue.js に基づくクロスプラットフォーム開発フレームワークとして、キャンバスを使用してチャートやアニメーション効果を描画する機能を提供します。この記事では、uniapp がキャンバスを使用してチャートやアニメーション効果を実現する方法を紹介し、具体的なコード例を示します。 2.キャンバス

html2canvas にはどのようなバージョンがありますか? html2canvas にはどのようなバージョンがありますか? Aug 22, 2023 pm 05:58 PM

html2canvas のバージョンには、html2canvas v0.x、html2canvas v1.x などが含まれます。詳細な紹介: 1. html2canvas v0.x (html2canvas の初期バージョン) 最新の安定バージョンは v0.5.0-alpha1 です。これは、多くのプロジェクトで広く使用され、検証されている成熟したバージョンです。2. html2canvas v1.x、これは html2canvas の新しいバージョンです。

tkinter Canvas にはどのようなプロパティがありますか? tkinter Canvas にはどのようなプロパティがありますか? Aug 21, 2023 pm 05:46 PM

tkinter Canvas 属性には、bg、bd、relief、width、height、cursor、highlightbackground、highlightcolor、highlightthickness、insertbackground、insertwidth、selectbackground、selectforeground、xscrollcommand 属性などが含まれます。詳しい紹介

キャンバスのマウス座標はどこにありますか? キャンバスのマウス座標はどこにありますか? Aug 22, 2023 pm 03:08 PM

Canvas のマウス座標を取得する方法: 1. JavaScript サンプル ファイルを作成します; 2. Canvas 要素への参照を取得し、マウス移動イベントのリスナーを追加します; 3. Canvas 上でマウスが移動すると、getMousePos 関数がトリガーされます; 4. 使用方法 「getBoundingClientRect()」メソッドはCanvas要素の位置とサイズ情報を取得し、event.clientXとevent.clientYを通じてマウス座標を取得します。

See all articles