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

回答編集履歴

3

コメントに対する回答を追加

2017/11/24 08:01

投稿

defghi1977
defghi1977

スコア4756

answer CHANGED
@@ -38,4 +38,19 @@
38
38
 
39
39
  ---
40
40
  NOTE:
41
- このようにスクリーン描画に関わる処理を記述する場合は`setInterval`メソッドよりも`requestAnimationFrame`メソッドの方が適しています.
41
+ このようにスクリーン描画に関わる処理を記述する場合は`setInterval`メソッドよりも`requestAnimationFrame`メソッドの方が適しています.
42
+
43
+ ---
44
+ [コメントに対する回答]
45
+ これは, 「`null`値に`onclick`を設定しようとしている」から発生するエラーで,`null`値は`getElementById`メソッドが引数`gray`に対応するノードが見つからなかったために取得されています. ではなぜ`gray`に対応するノードが見つからないかというと, `document`ノードにまだ`gray`ノードが追加されていないのに`script`要素の内容を実行したからです. 要するに, `gray`の前に`script`要素が配置されているので発生しています.
46
+
47
+ NOTE:
48
+ WEBブラウザはHTMLを読み込んだ際, HTMLコードを先頭から順に解釈して現れたノードをDOMに追加していきます.途中`script`要素が見つかった場合は**その時点でスクリプトを実行**します.
49
+
50
+ ではどうすべきかというと,
51
+
52
+ - `gray`の後に`script`を配置する
53
+ - `document`の発する`DOMContentLoaded`イベントに初期化処理を登録する
54
+ - そのまま`gray`ノードの`onclick`属性に処理を記述する
55
+
56
+ のように修正します.

2

記述漏れ修正

2017/11/24 08:01

投稿

defghi1977
defghi1977

スコア4756

answer CHANGED
@@ -30,7 +30,7 @@
30
30
  filter = sepiaFilter;
31
31
  };
32
32
  ```
33
- その上で, このタイマー処理の中にグレイスケース化やセピア化等の画像編集処理を記述していきます. (イベントはその処理の中身をえるわけです.
33
+ その上で, このタイマー処理の中にグレイスケース化やセピア化等の画像編集処理を記述していきます. (UI操作でその処理の中身を切り替えるわけです)
34
34
 
35
35
  ---
36
36
  NOTE:

1

サンプルコードを詳細化

2017/11/21 11:14

投稿

defghi1977
defghi1977

スコア4756

answer CHANGED
@@ -9,9 +9,28 @@
9
9
  var canvas = document.getElementById("c");
10
10
  canvas.getContext("2d").drawImage(video, 0, 0, 480, 270);
11
11
  //ここにグラフィックを編集するコードを挿入する.
12
+ filter(canvas);
12
13
  }, 1000/30);
14
+
15
+ //フィルタ関数群
16
+ function none(canvas){
17
+ }
18
+ function grayFilter(canvas){
19
+ }
20
+ function sepiaFilter(canvas){
21
+ }
22
+
23
+ //現在のフィルタ関数
24
+ let filter = none;
25
+ //クリックイベントでフィルタ関数を書き換える
26
+ gray.onclick = function(e){
27
+ filter = grayFilter;
28
+ };
29
+ sepia.onclick = function(e){
30
+ filter = sepiaFilter;
31
+ };
13
32
  ```
14
- その上で, このタイマー処理の中にグレイスケース化やセピア化等の画像編集処理を記述していきます.
33
+ その上で, このタイマー処理の中にグレイスケース化やセピア化等の画像編集処理を記述していきます. (イベントはその処理の中身を変えるわけです.
15
34
 
16
35
  ---
17
36
  NOTE: