質問編集履歴

1

自分のソースを追加

2019/03/07 22:03

投稿

marion
marion

スコア18

test CHANGED
File without changes
test CHANGED
@@ -1,211 +1,245 @@
1
+ javascript初心者です。
2
+
1
- jQueryのサンプルをjavascriptに書き換えようとしたのですが、行き詰まってしまいました。
3
+ jQueryを素のjavascriptに書き換えてみようとしたのですが、失敗しました。
4
+
2
-
5
+ コンソールログにも何も出てこなく、どうしたら分かるか、
6
+
3
- どのように書けば良いか、ご教示いただけますと勉強になります。
7
+ こが違うか、どのように書けば良いかなど一部だけでもご教示いただけますと勉強になります。
4
8
 
5
9
  よろしくお願いいたします。
6
10
 
7
11
 
8
12
 
9
- ```ここに言語を入力
10
-
11
- $(function() {
12
-
13
- var file = null; // 選択されるファイル
14
-
15
- var blob = null; // 画像(BLOBデータ)
16
-
17
- const THUMBNAIL_WIDTH = 500; // 画像リサイズ後の横の長さの最大値
18
-
19
- const THUMBNAIL_HEIGHT = 500; // 画像リサイズ後の縦の長さの最大値
20
-
21
-
22
-
23
- // ファイルが選択されたら
24
-
25
- $('input[type=file]').change(function() {
26
-
27
-
28
-
29
- // ファイル取得
30
-
31
- file = $(this).prop('files')[0];
32
-
33
- // 選択されファイルが画像かどうか判定
34
-
35
- if (file.type != 'image/jpeg' && file.type != 'image/png') {
36
-
37
- // 画像でない場合は終了
38
-
39
- file = null;
40
-
41
- blob = null;
42
-
43
- return;
13
+ html
14
+
15
+ ```ここに言語を入力
16
+
17
+ <div style="width: 500px">
18
+
19
+ <form enctype="multipart/form-data" method="post">
20
+
21
+ <input type="file" name="userfile" accept="image/*" onChange="imgInput">
22
+
23
+ </form>
24
+
25
+ </div>
26
+
27
+
28
+
29
+ ```
30
+
31
+ javascript
32
+
33
+ ```ここに言語入力
34
+
35
+ // profile
36
+
37
+ var file = null; // 選択されファイル
38
+
39
+ var blob = null; // 画像(BLOBデータ)
40
+
41
+ const THUMBNAIL_WIDTH = 500; // 画像リサイズ後の横の長さの最大値
42
+
43
+ const THUMBNAIL_HEIGHT = 500; // 画像リサイズ後の縦の長さの最大値
44
+
45
+
46
+
47
+ // ファイルが選択されたら
48
+
49
+ function imgInput() {
50
+
51
+ // ファイルを取得
52
+
53
+ file = this.prop('files')[0];
54
+
55
+ // 選択されたファイルが画像かどうか判定
56
+
57
+ if (file.type == 'image/jpeg', file.type == 'image/png') {
58
+
59
+ // 画像でない場合は終了
60
+
61
+ file = null;
62
+
63
+ blob = null;
64
+
65
+ return;
66
+
67
+ }
68
+
69
+ // 画像をリサイズする
70
+
71
+ var image = new Image();
72
+
73
+ var reader = new FileReader();
74
+
75
+
76
+
77
+ reader.onload = function(e) {
78
+
79
+ image.onload = function() {
80
+
81
+ if(image.width > image.height){
82
+
83
+ // 横長の画像は横のサイズを指定値にあわせる
84
+
85
+ var ratio = image.height/image.width;
86
+
87
+ var width = THUMBNAIL_WIDTH;
88
+
89
+ var height = THUMBNAIL_WIDTH * ratio;
90
+
91
+ } else {
92
+
93
+ // 縦長の画像は縦のサイズを指定値にあわせる
94
+
95
+ var ratio = image.width/image.height;
96
+
97
+ var width = THUMBNAIL_HEIGHT * ratio;
98
+
99
+ var height = THUMBNAIL_HEIGHT;
100
+
101
+ }
102
+
103
+ // サムネ描画用canvasのサイズを上で算出した値に変更
104
+
105
+ var canvas = document.getElementById('canvas');
106
+
107
+ canvas.setAttribute('width', width);
108
+
109
+ canvas.setAttribute('height', height);
110
+
111
+ var ctx = canvas[0].getContext('2d');
112
+
113
+ // canvasに既に描画されている画像をクリア
114
+
115
+ ctx.clearRect(0,0,width,height);
116
+
117
+ // canvasにサムネイルを描画
118
+
119
+ ctx.drawImage(image,0,0,image.width,image.height,0,0,width,height);
120
+
121
+ }
44
122
 
45
123
  }
46
124
 
47
-
48
-
49
- // 画像をリサイズする
50
-
51
- var image = new Image();
52
-
53
- var reader = new FileReader();
54
-
55
- reader.onload = function(e) {
56
-
57
- image.onload = function() {
58
-
59
- var width, height;
60
-
61
- if(image.width > image.height){
62
-
63
- // 横長の画像は横のサイズを指定値にあわせる
64
-
65
- var ratio = image.height/image.width;
66
-
67
- width = THUMBNAIL_WIDTH;
68
-
69
- height = THUMBNAIL_WIDTH * ratio;
70
-
71
- } else {
72
-
73
- // 縦長の画像は縦のサイズを指定値にあわせる
74
-
75
- var ratio = image.width/image.height;
76
-
77
- width = THUMBNAIL_HEIGHT * ratio;
78
-
79
- height = THUMBNAIL_HEIGHT;
80
-
81
- }
82
-
83
- // サムネ描画用canvasのサイズを上で算出した値に変更
84
-
85
- var canvas = $('#canvas')
86
-
87
- .attr('width', width)
88
-
89
- .attr('height', height);
90
-
91
- var ctx = canvas[0].getContext('2d');
92
-
93
- // canvasに既に描画されている画像をクリア
94
-
95
- ctx.clearRect(0,0,width,height);
96
-
97
- // canvasにサムネイルを描画
98
-
99
- ctx.drawImage(image,0,0,image.width,image.height,0,0,width,height);
100
-
101
-
102
-
103
- // canvasからbase64画像データを取得
104
-
105
- var base64 = canvas.get(0).toDataURL('image/jpeg');
106
-
107
- // base64からBlobデータを作成
108
-
109
- var barr, bin, i, len;
110
-
111
- bin = atob(base64.split('base64,')[1]);
112
-
113
- len = bin.length;
114
-
115
- barr = new Uint8Array(len);
116
-
117
- i = 0;
118
-
119
- while (i < len) {
120
-
121
- barr[i] = bin.charCodeAt(i);
122
-
123
- i++;
124
-
125
- }
126
-
127
- blob = new Blob([barr], {type: 'image/jpeg'});
128
-
129
- console.log(blob);
130
-
131
- }
132
-
133
- image.src = e.target.result;
125
+ }
126
+
127
+ }
128
+
129
+ ```
130
+
131
+
132
+
133
+ 元html
134
+
135
+ ```ここに言語を入力
136
+
137
+ <div style="width: 500px">
138
+
139
+ <form enctype="multipart/form-data" method="post">
140
+
141
+ <input type="file" name="userfile" accept="image/*">
142
+
143
+ </form>
144
+
145
+ </div>
146
+
147
+ ```
148
+
149
+
150
+
151
+ 元jQuery
152
+
153
+ ```ここに言語を入力
154
+
155
+ $('input[type=file]').change(function() {
156
+
157
+
158
+
159
+ // ファイルを取得
160
+
161
+ file = $(this).prop('files')[0];
162
+
163
+ // 選択されたファイルが画像かどうか判定
164
+
165
+ if (file.type != 'image/jpeg' && file.type != 'image/png') {
166
+
167
+ // 画像でない場合は終了
168
+
169
+ file = null;
170
+
171
+ blob = null;
172
+
173
+ return;
174
+
175
+ }
176
+
177
+
178
+
179
+ // 画像をリサイズする
180
+
181
+ var image = new Image();
182
+
183
+ var reader = new FileReader();
184
+
185
+
186
+
187
+ reader.onload = function(e) {
188
+
189
+ image.onload = function() {
190
+
191
+ var width, height;
192
+
193
+ if(image.width > image.height){
194
+
195
+ // 横長の画像は横のサイズを指定値にあわせる
196
+
197
+ var ratio = image.height/image.width;
198
+
199
+ width = THUMBNAIL_WIDTH;
200
+
201
+ height = THUMBNAIL_WIDTH * ratio;
202
+
203
+ } else {
204
+
205
+ // 縦長の画像は縦のサイズを指定値にあわせる
206
+
207
+ var ratio = image.width/image.height;
208
+
209
+ width = THUMBNAIL_HEIGHT * ratio;
210
+
211
+ height = THUMBNAIL_HEIGHT;
212
+
213
+ }
214
+
215
+ // サムネ描画用canvasのサイズを上で算出した値に変更
216
+
217
+ var canvas = $('#canvas')
218
+
219
+ .attr('width', width)
220
+
221
+ .attr('height', height);
222
+
223
+ var ctx = canvas[0].getContext('2d');
224
+
225
+ // canvasに既に描画されている画像をクリア
226
+
227
+ ctx.clearRect(0,0,width,height);
228
+
229
+ // canvasにサムネイルを描画
230
+
231
+ ctx.drawImage(image,0,0,image.width,image.height,0,0,width,height);
232
+
233
+
234
+
235
+ }
134
236
 
135
237
  }
136
238
 
137
- reader.readAsDataURL(file);
138
-
139
- });
140
-
141
-
142
-
143
-
144
-
145
- // アップロード開始ボタンがクリックされたら
146
-
147
- $('#upload').click(function(){
148
-
149
-
150
-
151
- // ファイルが指定されていなければ何も起こらない
152
-
153
- if(!file || !blob) {
154
-
155
- return;
156
-
157
- }
239
+ }
158
-
159
-
160
-
161
- var name, fd = new FormData();
162
-
163
- fd.append('file', blob); // ファイルを添付する
164
-
165
-
166
-
167
- $.ajax({
168
-
169
- url: "http://exapmle.com", // 送信先
170
-
171
- type: 'POST',
172
-
173
- dataType: 'json',
174
-
175
- data: fd,
176
-
177
- processData: false,
178
-
179
- contentType: false
180
-
181
- })
182
-
183
- .done(function( data, textStatus, jqXHR ) {
184
-
185
- // 送信成功
186
-
187
- })
188
-
189
- .fail(function( jqXHR, textStatus, errorThrown ) {
190
-
191
- // 送信失敗
192
-
193
- });
194
-
195
-
196
-
197
- });
198
-
199
-
200
240
 
201
241
  });
202
242
 
203
243
 
204
244
 
205
245
  ```
206
-
207
-
208
-
209
- 元サイト
210
-
211
- https://qiita.com/komakomako/items/8efd4184f6d7cf1363f2