質問するログイン新規登録

回答編集履歴

1

コードの修正 説明の修正

2021/02/01 22:57

投稿

nekora
nekora

スコア501

answer CHANGED
@@ -6,7 +6,12 @@
6
6
 
7
7
  あとはCSSでスクロールアニメーションの時間などを調節して気に入った状態にしてみてください。
8
8
 
9
+ ガーベージコレクションを強制実行させようと格闘しましたが上手くいかなかったので、
10
+ 一度画面外に出てフェードアウトしたときにチャートを破棄しているのですが、再度画面に
11
+ 入ってきたときに、前のチャートが残ってしまってます。その状態から再描画されます。
12
+ 申し訳ありません。
9
13
 
14
+
10
15
  ```HTML
11
16
  <!DOCTYPE html>
12
17
  <html lang="ja">
@@ -41,7 +46,7 @@
41
46
  .fadein {
42
47
  opacity : 0;
43
48
  transform : translate(0, 50px);
44
- transition : all 1000ms;
49
+ transition : all 8000ms;
45
50
  }
46
51
 
47
52
  /* 画面内に入った状態 */
@@ -57,13 +62,22 @@
57
62
  </div>
58
63
 
59
64
  <script>
65
+
66
+ var drowing = false;
67
+
60
68
  $('#doughnut07').on('inview', function(event, isInView){ /* doughnut07はidなので、#で始めなければならない */
61
69
  /*▼▼▼スクロール効果▼▼▼*/
62
- if (isInView){
70
+ if (isInView){ /*画面内に入ったか判定*/
63
71
  $('#doughnut07').addClass('scrollin');
64
72
  } else {
65
73
  $('#doughnut07').removeClass('scrollin');
66
74
  }
75
+
76
+ setTimeout(drawChart, 8000, isInView, drowing); /* CSSのスクロールアニメーション時間と合わせる*/
77
+ });
78
+
79
+ function drawChart(isInView, drowing) {
80
+
67
81
  /*▼▼▼グラフ▼▼▼*/
68
82
  var data = [
69
83
  {
@@ -76,13 +90,46 @@
76
90
  }
77
91
  ];
78
92
 
93
+ if (isInView && !drowing) {
79
- var myDoughnut = new Chart(document.getElementById("doughnut07").
94
+ window.myDoughnut = new Chart(document.getElementById("doughnut07").
80
- getContext("2d")).Doughnut(data, {
95
+ getContext("2d")).Doughnut(data, {
81
- tooltipTemplate: "<%=value%> %",
96
+ tooltipTemplate: "<%=value%> %",
82
- animation:true,
97
+ animation:true,
83
- enabled:false,
98
+ enabled:false,
84
99
  });
85
- });
100
+ }
101
+
102
+ if (isInView) {
103
+ drowing = true;
104
+ } else {
105
+ if (myDoughnut) {
106
+ myDoughnut.destroy();
107
+
108
+ /*
109
+ // 強制ガーベージコレクション実行
110
+ var userAgent = window.navigator.userAgent.toLowerCase();
111
+
112
+ if (userAgent.indexOf('msie') != -1 || userAgent.indexOf('trident') != -1) {
113
+ //IE向けの記述
114
+ window.CollectGarbage();
115
+ } else if(userAgent.indexOf('edge') != -1) {
116
+ //旧Edge向けの記述
117
+ } else if(userAgent.indexOf('chrome') != -1) {
118
+ //Google Chrome向けの記述
119
+ window.gc();
120
+ } else if(userAgent.indexOf('safari') != -1) {
121
+ //Safari向けの記述
122
+ } else if(userAgent.indexOf('firefox') != -1) {
123
+ //FireFox向けの記述
124
+ } else {
125
+ //その他のブラウザ向けの記述
126
+ }
127
+ */
128
+
129
+ drowing = false;
130
+ }
131
+ }
132
+ }
86
133
  </script>
87
134
  </section>
88
135
  </article>