回答編集履歴

3

回答の趣旨を明確化

2018/03/05 07:51

投稿

defghi1977
defghi1977

スコア4756

test CHANGED
@@ -20,9 +20,9 @@
20
20
 
21
21
  - コンテキストオブジェクトの`clearRect`メソッドを上書きし, この中で`drawImage`する.
22
22
 
23
- Chart.jsの動作逆手取ったものとので, 動作検証コストがかかります.
23
+ Chart.jsがcanvas要素内容書き換える際, まず**初め`clearRect`メソッドを呼び出している筈**なので, そこ独自の描画処理(ここでは`drawImage`メソッド)をフックします.
24
24
 
25
- (筆者推測なのでく保証がりません)
25
+ の方法Chart.jsの動作を逆手に取っているため, 動作検にコストかかります.
26
26
 
27
27
 
28
28
 

2

サンプルコードを追加

2018/03/05 07:51

投稿

defghi1977
defghi1977

スコア4756

test CHANGED
@@ -29,3 +29,69 @@
29
29
  NOTE:
30
30
 
31
31
  もちろんChart.js側に画像の挿入に関わるAPIが備わっていればそれを使うのがベストです.
32
+
33
+
34
+
35
+ ---
36
+
37
+
38
+
39
+ 例えば3つめの方法であれば, 次のようにします.
40
+
41
+
42
+
43
+ ```JavaScript
44
+
45
+ <canvas id="myChart" width="150" height="150" ></canvas>
46
+
47
+ <script>
48
+
49
+ var canvas = document.getElementById("myChart");
50
+
51
+ var ctx = canvas.getContext("2d");
52
+
53
+ var img = new Image();
54
+
55
+ img.src = "sampleImg.png";
56
+
57
+ var oClearRect = ctx.clearRect;//元のclearRect
58
+
59
+ //Chart.jsがclearRectを呼び出す毎にdrawImageする
60
+
61
+ ctx.clearRect = function(){
62
+
63
+ oClearRect.apply(this, arguments);
64
+
65
+ this.drawImage(img, 0, 0, 30, 30);
66
+
67
+ };
68
+
69
+
70
+
71
+ var myRadarChart = new Chart(ctx, {
72
+
73
+ type: 'radar',
74
+
75
+ data: {
76
+
77
+ labels: ['Running', 'Swimming', 'Eating', 'Cycling'],
78
+
79
+ datasets: [
80
+
81
+ {data: [20, 10, 4, 2]}
82
+
83
+ ]
84
+
85
+ }
86
+
87
+ });
88
+
89
+ </script>
90
+
91
+ ```
92
+
93
+
94
+
95
+ NOTE:
96
+
97
+ なお, コードの内容を理解できない(動作原理を読み解けない)のであれば, 後々のコードメンテナンスに大きな禍根を残すことになるため避けたほうが無難です.

1

typo修正

2018/03/05 05:26

投稿

defghi1977
defghi1977

スコア4756

test CHANGED
@@ -28,4 +28,4 @@
28
28
 
29
29
  NOTE:
30
30
 
31
- もちろんChart.js側に画像の挿入に関わるAPI(もしくは)が備わっていればそれを使うのがベストです.
31
+ もちろんChart.js側に画像の挿入に関わるAPIが備わっていればそれを使うのがベストです.