描画効果実装コードJavaScriptvar キャンバス = document.getElementById("mycanvas"); var w = window.innerWidth; var h = window.innerHeight; キャンバスの高さ = 1000; キャンバスの幅 = 1400; var ctx = canvas.getContext('2d'); var ポップ可能 = true; var スライス = []; 関数 shadeColor(色, パーセント) { var f = parseInt(color.slice(1), 16)、 t = パーセント < 0 ? 0 : 255、 p = パーセント < 0 ? パーセント * -1 : パーセント、 R = f >> 16、 G = f >> 8 & 0x00FF、 B = f & 0x0000FF; 戻り値 "#" + (0x1000000 + (Math.round((t - R) * p) + R) * 0x10000 + (Math.round((t - G) * p) + G) * 0x100 + (Math.round((t - B) * p) + B)).toString(16).slice(1); } 関数 pieSlice(oX, oY, r, pos, len, col, data) { this.data = データ this.originX = oX; this.originY = oY; 半径rを設定します。 this.startingRadian = pos; 長さ = len; this.color = col; this.highlightedColor = shadeColor(this.color, .6); this.highlighted = false; this.popped = false; this.animationFrame = 0; 関数setColor(c) { 色を反転します。 } } pieSlice.prototype.displayData = function(){ ctx.fillStyle = this.color; ctx.fillRect(this.originX - this.radius - 40, this.originY - this.radius - 35, 25, 25); ctx.fillStyle = "白"; ctx.font = "15px Arial"; ctx.fillText(this.data、this.originX - this.radius - 10、this.originY - this.radius - 18); } pieSlice.prototype.render = 関数() { if (!this.highlighted) { ctx.fillStyle = this.color; ctx.strokeStyle = this.color; } それ以外 { if (!this.popped && poppable) { 表示データ } // ctx.fillStyle = this.color; ctx.fillStyle = this.highlightedColor; ctx.strokeStyle = this.color; } ctx.beginPath(); var xOffset = Math.cos(this.length / 2 + this.startingRadian) * this.animationFrame; var yOffset = Math.sin(this.length / 2 + this.startingRadian) * this.animationFrame; ctx.moveTo(this.originX + xOffset、this.originY + yOffset); var x = this.originX + xOffset + this.radius * Math.cos(this.startingRadian); var y = this.originY + yOffset + this.radius * Math.sin(this.startingRadian); ctx.lineTo(x, y); ctx.arc(this.originX + xOffset、this.originY + yOffset、this.radius、this.startingRadian、this.startingRadian + this.length); if (this.popped) { var fill = ctx.fillStyle; 表示データ ctx.fillStyle = 塗りつぶし; (this.animationFrame < 30)の場合{ this.animationFrame += 2; } } それ以外 { (this.animationFrame > 0)の場合{ this.animationFrame -= 2; } } ctx.closePath(); //ctx.stroke(); //if(this.highlighted) { ctx.fill(); // } } pieSlice.prototype.update = 関数() { } 関数 pieChart(s) { this.slices = s; } pieChart.prototype.render = 関数() { this.slices.forEach(関数(p) { p.render(); }); }; pieChart.prototype.update = 関数() { this.slices.forEach(関数(p) { p.update(); }); } //パイワン var pie = new pieSlice(700, 170, 125, 0, Math.PI / 4, "#FFD1DC", 12); var slice2 = new pieSlice(700, 170, 125, Math.PI / 4, Math.PI / 4, "#08E8DE"); var slice3 = new pieSlice(700, 170, 125, Math.PI / 2, Math.PI / 4, "#6699CC"); var slice4 = new pieSlice(700, 170, 125, 3 * Math.PI / 4, Math.PI, "#ADD8E6"); var slice5 = new pieSlice(700, 170, 125, 7 * Math.PI / 4, Math.PI / 4, "#B19CD9"); var スライス1 = [円グラフ、スライス2、スライス3、スライス4、スライス5]; var pink = new pieSlice(220, 170, 125, 0, Math.PI / 3, "#FF4B4B"); var orange = new pieSlice(220, 170, 125, Math.PI / 3, Math.PI / 3, "#FF931B"); var yellow = new pieSlice(220, 170, 125, 2 * Math.PI / 3, Math.PI / 3, "#FFE21B"); var green = new pieSlice(220, 170, 125, 3 * Math.PI / 3, Math.PI / 3, "#90E64E"); var blue = new pieSlice(220, 170, 125, 4 * Math.PI / 3, Math.PI / 3, "#6097D9"); var purple = new pieSlice(220, 170, 125, 5 * Math.PI / 3, Math.PI / 3, "#8365DD"); var redd = new pieSlice(1180, 170, 125, 0, 2 * Math.PI / 3, "#B3989B"); var orangee = new pieSlice(1180, 170, 125, 2 * Math.PI / 3, 1 * Math.PI / 8, "#C1AEE0"); var bluee = new pieSlice(1180, 170, 125, 19 * Math.PI / 24, 4 * Math.PI / 24, "#928CE9"); var greenn = new pieSlice(1180, 170, 125, 23 * Math.PI/24, 3* Math.PI/8, "#676675"); var purplee = new pieSlice(1180, 170, 125, 4 * Math.PI/3, 3* Math.PI/8, "#947D59"); var ceci = new pieSlice(1180, 170, 125, 41 * Math.PI/24, 7*Math.PI/24, "#D994E0"); var slices3 = [redd, orangee, bluee, greenn, purplee, ceci]; var slices2 = [ピンク、オレンジ、黄色、緑、青、紫]; var pie1 = 新しい pieChart(slices1); var pie2 = 新しい pieChart(slices2); var pie3 = 新しい pieChart(slices3); var update = 関数() { pie1.更新(); } var レンダリング = 関数() { ctx.clearRect(0, 0, キャンバス.幅, キャンバス.高さ); pie1.レンダリング(); pie2.レンダリング(); pie3.レンダリング(); } var ステップ = 関数() { アップデート(); 与える(); アニメーション化(ステップ); } var animate = window.requestAnimationFrame || window.webkitRequestAnimationFrame || window.mozRequestAnimationFrame || 関数(コールバック) { window.setTimeout(コールバック、1000 / 60); }; スライスをプッシュして適用します(スライス、スライス1)。 スライスをプッシュして適用します(スライス、スライス2)。 スライスをプッシュして適用します(スライス、スライス3)。 canvas.addEventListener("mousemove", 関数(e) { var x = e.clientX; var y = e.clientY; スライス.forEach(関数(スライス) { ctx.beginPath(); var xOffset = Math.cos(slice.length / 2 + slice.startingRadian) * slice.animationFrame; var yOffset = Math.sin(slice.length / 2 + slice.startingRadian) * slice.animationFrame; ctx.moveTo(スライス.originX + xOffset、スライス.originY + yOffset); var xx = slice.originX + xOffset + slice.radius * Math.cos(slice.startingRadian); var yy = slice.originY + yOffset + slice.radius * Math.sin(slice.startingRadian); ctx.lineTo(xx, yy); ctx.arc(slice.originX + xOffset、slice.originY + yOffset、slice.radius、slice.startingRadian、slice.startingRadian + slice.length); ctx.isPointInPath(x, y) の場合 { スライスのハイライト = true; スライスの表示データ(); } それ以外 { スライスのハイライト = false; } ctx.closePath(); }); }); canvas.addEventListener("クリック", function(e) { var x = e.clientX; var y = e.clientY; スライス.forEach(関数(スライス) { ctx.beginPath(); var xOffset = Math.cos(slice.length / 2 + slice.startingRadian) * slice.animationFrame; var yOffset = Math.sin(slice.length / 2 + slice.startingRadian) * slice.animationFrame; ctx.moveTo(スライス.originX + xOffset、スライス.originY + yOffset); var xx = slice.originX + xOffset + slice.radius * Math.cos(slice.startingRadian); var yy = slice.originY + yOffset + slice.radius * Math.sin(slice.startingRadian); ctx.lineTo(xx, yy); ctx.arc(slice.originX + xOffset、slice.originY + yOffset、slice.radius、slice.startingRadian、slice.startingRadian + slice.length); ctx.isPointInPath(x, y) の場合 { if (スライスがポップされる) { スライスがポップされる = false; ポップ可能 = true; } それ以外 { if(ポップ可能){ スライスをポップすると true になります。 ポップ可能 = false; } } スライスのハイライト = false; } ctx.closePath(); }); }); //ループを開始 アニメーション化(ステップ); html<キャンバスid="mycanvas"></キャンバス> 上記は、JavaScript で円グラフを描画する例の詳細です。JavaScript で円グラフを描画する方法の詳細については、123WORDPRESS.COM の他の関連記事に注目してください。 以下もご興味があるかもしれません:
|
<<: 実用的な基本的な Linux sed コマンドのサンプルコード
>>: MySQL での mysqladmin 日常管理コマンドの概要 (必読)
目次序文背景大きな推測パターンを見つける構造とスタイルコンポーネントの実装パラメータキーボードの種類...
現在、プロジェクトの要件により、フォームの送信を制御し、送信前にデータを検証および処理するために j...
純粋な CSS で固定ヘッダーを実装するのが難しい主な理由は 2 つあります。まず、最大のシェアを持...
要件は、製品の評価データを渡すことであり、ページには対応する星の数が表示されます。 1. 異なる評価...
Linux では、シンボリック リンクを作成または削除する必要がある場合があります。もしそうなら、何...
Ubuntu 18.04の場合1. sudo apt install python 。コマンドライン...
1. パラダイムこのパラダイムの英語名は Normal Form であり、1970 年代にリレーショ...
インターフェースの役割:インターフェース (英語: interface) の機能は、簡単に言えば、コ...
Nginx は、IP ベースの仮想ホスト構成、ポート ベースの仮想ホスト構成、ドメイン名ベースの仮想...
この記事では、MySQL 8.0.16 winx64.zipのインストールと設定方法の具体的なコード...
アップグレードの背景: MySQLの下位バージョンの脆弱性を解決するために、MySQLはMySQL ...
序文これまでは、/bin/ ディレクトリのソフトリンクを変更して Python のバージョンを切り替...
1. MySQLデータベースをダウンロードし、インストールして設定するダウンロードアドレス: htt...
1. 質問:最近、挿入操作を行っています。MySQLのバージョンは5.7です。挿入は成功しますが、エ...
目次React Hooks に基づく状態共有の実装ユーザーエクスペリエンスこの記事では、主に Rea...