質問編集履歴

1

canvasに表示させてみた

2019/07/04 03:29

投稿

mogumogu22
mogumogu22

スコア24

test CHANGED
File without changes
test CHANGED
@@ -1,6 +1,6 @@
1
1
  ### 前提・実現したいこと
2
2
 
3
- 画像を表示して、左へベルトコンベアのように流れるようにしたいです。画像は並べて表示できたのですが、画像を横に動かすことができません。どなたか助言をいただけると嬉しいです。
3
+ 画像を表示して、左へベルトコンベアのように流れるようにしたいです。画像は並べて表示できたのですが、画像を横に動かすことができません。camvasに表示させてみたのですが、動くようにはなりましたが、点滅のようになってしまい挙動がおかしくなってしまいました。どなたか助言をいただけると嬉しいです。
4
4
 
5
5
  ### 発生している問題・エラーメッセージ
6
6
 
@@ -8,7 +8,7 @@
8
8
 
9
9
  ```
10
10
 
11
- 画像が表示されたまま動かない
11
+ 画像が点滅する
12
12
 
13
13
  ```
14
14
 
@@ -16,57 +16,113 @@
16
16
 
17
17
  ### 該当のソースコード
18
18
 
19
+ ```html
19
20
 
21
+
22
+
23
+ <div id="screen_box" width="100%" >
24
+
25
+ <canvas id="screen" ></canvas>
26
+
27
+ </div>
28
+
29
+ ```
20
30
 
21
31
  ```js
22
32
 
23
- <div id="result2" style="white-space: nowrap;"></div>
33
+ "use strict"
24
34
 
25
- <script type="text/javascript">
35
+ // 全体で使用する変数を定義
26
36
 
27
- let ga = [
37
+ var canvas, ctx;
28
38
 
29
- 'images/pan4.png',
39
+ // プレイヤーの画像を保持する変数を定義
30
40
 
31
- 'images/pan2.png',
41
+ var img_player;
32
42
 
33
- 'images/pan3.png',
43
+ var interval =500;
34
44
 
35
- 'images/pan1.png',
45
+ // ページロード時に呼び出される処理を指定
36
46
 
37
- ];
47
+ window.onload = function() {
38
48
 
39
- let interval = 20;
49
+ // コンテキストを取得(おまじない)
40
50
 
41
- let speed = 1;
51
+ canvas = document.getElementById('screen');
42
52
 
43
- let sssList = "";
53
+ ctx = canvas.getContext('2d');
44
54
 
45
- ga=ga.concat(ga);
55
+ //横幅取得。指定。CSSだと画像ゆがむ
46
56
 
47
- for( i = 0 ; i < ga.length ; i++ ){
57
+ var container = document.getElementById('screen_box');
48
58
 
49
- let sss = '<img src ="'+ga[i]+'" id="mass" style="width: 13em;">';
59
+ canvas.width = container.clientWidth;
50
60
 
51
- sssList += sss ;
52
61
 
53
- }
54
62
 
55
- document.getElementById('result2').innerHTML = sssList;
63
+ //canvasグラフィックを描くためのコンテキストオブジェクトを取得する.
56
64
 
57
- let mass = document.getElementById('mass')
58
65
 
59
- function slide(){
60
66
 
61
- mass.style.left =- speed + "px";
67
+ let ga = [
62
68
 
63
- setTimeout(slide,interval);
69
+ './images/pan4.png',
64
70
 
65
- }
71
+ './images/pan2.png',
66
72
 
67
- slide();
73
+ './images/pan3.png',
68
74
 
75
+ './images/pan1.png',
76
+
77
+ ];
78
+
69
- </script>
79
+ ga=ga.concat(ga);
80
+
81
+ for(let i = 0 ; i < ga.length ; i++ ){
82
+
83
+
84
+
85
+ let x = 120*i; //letだと何故かばらけるvarだとかさなる。
86
+
87
+ let img_i = new Image();
88
+
89
+ img_i.setAttribute('src', ga[i]);
90
+
91
+
92
+
93
+
94
+
95
+ img_i .addEventListener('load',function(){
96
+
97
+
98
+
99
+ });
100
+
101
+
102
+
103
+ (function timer(){
104
+
105
+ setTimeout(function(){
106
+
107
+ ctx.clearRect(0, 0, canvas.width, canvas.height);
108
+
109
+ x -= 20 ;
110
+
111
+ ctx.drawImage(img_i, x, -20, 200,200);
112
+
113
+
114
+
115
+
116
+
117
+ timer();
118
+
119
+ },1000);
120
+
121
+ })();
122
+
123
+ };
124
+
125
+ };
70
126
 
71
127
  ```
72
128
 
@@ -78,6 +134,8 @@
78
134
 
79
135
  styleで一定時間ごとにleftのpxを減らす。
80
136
 
137
+ canvasに表示させる。
138
+
81
139
 
82
140
 
83
141
  ### 補足情報(FW/ツールのバージョンなど)