質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
JavaScript

JavaScriptは、プログラミング言語のひとつです。ネットスケープコミュニケーションズで開発されました。 開発当初はLiveScriptと呼ばれていましたが、業務提携していたサン・マイクロシステムズが開発したJavaが脚光を浴びていたことから、JavaScriptと改名されました。 動きのあるWebページを作ることを目的に開発されたもので、主要なWebブラウザのほとんどに搭載されています。

jQuery

jQueryは、JavaScriptライブラリのひとつです。 簡単な記述で、JavaScriptコードを実行できるように設計されています。 2006年1月に、ジョン・レシグが発表しました。 jQueryは独特の記述法を用いており、機能のほとんどは「$関数」や「jQueryオブジェクト」のメソッドとして定義されています。

Q&A

解決済

4回答

1117閲覧

jQueryからjavascriptへの書き換え

marion

総合スコア18

JavaScript

JavaScriptは、プログラミング言語のひとつです。ネットスケープコミュニケーションズで開発されました。 開発当初はLiveScriptと呼ばれていましたが、業務提携していたサン・マイクロシステムズが開発したJavaが脚光を浴びていたことから、JavaScriptと改名されました。 動きのあるWebページを作ることを目的に開発されたもので、主要なWebブラウザのほとんどに搭載されています。

jQuery

jQueryは、JavaScriptライブラリのひとつです。 簡単な記述で、JavaScriptコードを実行できるように設計されています。 2006年1月に、ジョン・レシグが発表しました。 jQueryは独特の記述法を用いており、機能のほとんどは「$関数」や「jQueryオブジェクト」のメソッドとして定義されています。

0グッド

1クリップ

投稿2019/03/07 21:02

編集2019/03/07 22:03

javascript初心者です。
jQueryを素のjavascriptに書き換えてみようとしたのですが、失敗しました。
コンソールログにも何も出てこなく、どうしたら分かるか、
どこが違うか、どのように書けば良いかなど、一部だけでもご教示いただけますと勉強になります。
よろしくお願いいたします。

html

<div style="width: 500px"> <form enctype="multipart/form-data" method="post"> <input type="file" name="userfile" accept="image/*" onChange="imgInput"> </form> </div>

javascript

// profile var file = null; // 選択されるファイル var blob = null; // 画像(BLOBデータ) const THUMBNAIL_WIDTH = 500; // 画像リサイズ後の横の長さの最大値 const THUMBNAIL_HEIGHT = 500; // 画像リサイズ後の縦の長さの最大値 // ファイルが選択されたら function imgInput() { // ファイルを取得 file = this.prop('files')[0]; // 選択されたファイルが画像かどうか判定 if (file.type == 'image/jpeg', file.type == 'image/png') { // 画像でない場合は終了 file = null; blob = null; return; } // 画像をリサイズする var image = new Image(); var reader = new FileReader(); reader.onload = function(e) { image.onload = function() { if(image.width > image.height){ // 横長の画像は横のサイズを指定値にあわせる var ratio = image.height/image.width; var width = THUMBNAIL_WIDTH; var height = THUMBNAIL_WIDTH * ratio; } else { // 縦長の画像は縦のサイズを指定値にあわせる var ratio = image.width/image.height; var width = THUMBNAIL_HEIGHT * ratio; var height = THUMBNAIL_HEIGHT; } // サムネ描画用canvasのサイズを上で算出した値に変更 var canvas = document.getElementById('canvas'); canvas.setAttribute('width', width); canvas.setAttribute('height', height); var ctx = canvas[0].getContext('2d'); // canvasに既に描画されている画像をクリア ctx.clearRect(0,0,width,height); // canvasにサムネイルを描画 ctx.drawImage(image,0,0,image.width,image.height,0,0,width,height); } } } }

元html

<div style="width: 500px"> <form enctype="multipart/form-data" method="post"> <input type="file" name="userfile" accept="image/*"> </form> </div>

元jQuery

$('input[type=file]').change(function() { // ファイルを取得 file = $(this).prop('files')[0]; // 選択されたファイルが画像かどうか判定 if (file.type != 'image/jpeg' && file.type != 'image/png') { // 画像でない場合は終了 file = null; blob = null; return; } // 画像をリサイズする var image = new Image(); var reader = new FileReader(); reader.onload = function(e) { image.onload = function() { var width, height; if(image.width > image.height){ // 横長の画像は横のサイズを指定値にあわせる var ratio = image.height/image.width; width = THUMBNAIL_WIDTH; height = THUMBNAIL_WIDTH * ratio; } else { // 縦長の画像は縦のサイズを指定値にあわせる var ratio = image.width/image.height; width = THUMBNAIL_HEIGHT * ratio; height = THUMBNAIL_HEIGHT; } // サムネ描画用canvasのサイズを上で算出した値に変更 var canvas = $('#canvas') .attr('width', width) .attr('height', height); var ctx = canvas[0].getContext('2d'); // canvasに既に描画されている画像をクリア ctx.clearRect(0,0,width,height); // canvasにサムネイルを描画 ctx.drawImage(image,0,0,image.width,image.height,0,0,width,height); } } } });

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

m.ts10806

2019/03/07 21:09 編集

どう詰まったのか分かりません。ほとんど進んでいないような? 「少しだけやったからあとはやってくれ」という作業依頼でしょうか? きちんと質問にしてください。
marion

2019/03/07 22:10 編集

自分の書いてみたコードを追加しました。 1つずつ調べて分かる限り違いそうな箇所は直してはみたものの、おそらくボロボロだと思いますので、宜しければ一箇所でも違うところでしたり変換するのに参考になる何かでも構いませんのでご教示いただけましたら幸いです。
m.ts10806

2019/03/07 22:12

元と同じ動作が一通り確認できているかも追記願います。
m.ts10806

2019/03/07 22:13

あ、できてないってことですね。了解です。
marion

2019/03/07 22:14

動作しないので質問させていただきました。
marion

2019/03/07 22:19

入れ違いでしたね、見てくださりありがとうございます。
date

2019/03/08 00:44

閉じかっこの数が合わないのはこの上に何か別な処理がありますか? なければ、SyntaxError: expected expression, got '}'とでますが
marion

2019/03/08 11:51

別の処理が書いてあったのですが、削った際に残ってしまいました。
guest

回答4

0

javascript

1<script> 2window.addEventListener('DOMContentLoaded', function(e){ 3 document.querySelector('[type=file]').addEventListener('change',function(e){ 4 var file = e.target.files[0]; 5 var type=file.type; 6 var blob=new Blob([file],{type:type}); 7 var url = window.URL || window.webkitURL; 8 var image = new Image(); 9 var ratio,width,height; 10 image.src = url.createObjectURL(blob); 11 image.onload=function(e){ 12 const THUMBNAIL_WIDTH = 500; 13 const THUMBNAIL_HEIGHT = 500; 14 if(image.width > image.height){ 15 ratio = image.height/image.width; 16 width = THUMBNAIL_WIDTH; 17 height = parseInt(THUMBNAIL_WIDTH * ratio); 18 } else { 19 ratio = image.width/image.height; 20 width = parseInt(THUMBNAIL_HEIGHT * ratio); 21 height = THUMBNAIL_HEIGHT; 22 } 23 var canvas = document.querySelector('#canvas'); 24 canvas.setAttribute('width', width); 25 canvas.setAttribute('height', height); 26 console.log(canvas); 27 var ctx = canvas.getContext('2d'); 28 ctx.clearRect(0,0,width,height); 29 ctx.drawImage(image,0,0,image.width,image.height,0,0,width,height); 30 } 31 }); 32}); 33</script> 34<div style="width: 500px"> 35<form enctype="multipart/form-data" method="post"> 36<input type="file" name="userfile" accept="image/*"> 37</form> 38<canvas id="canvas"></canvas> 39</div>

投稿2019/03/08 02:06

yambejp

総合スコア114839

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

yambejp

2019/03/08 02:08

image処理ならfilereaderなしに読み込めますよね
marion

2019/03/20 08:11

filereaderなしで読み込む方法ご教示くださりありがとうございます。 上記ソースコードで動きました。 元のソースといただいたものを見比べて頑張ってみます。ありがとうございます!
guest

0

ベストアンサー

元のJQueryの段階でおかしいので、どう修正しても動かないかと思います。(閉じ括弧}が多い、FileReaderをnewしてonloadは設定しているが、使用していない、HTMLにはないcanvasが出てくる)

非JQueryの方ですが、
・閉じ括弧が一つ多い
・onChangeで関数を呼び出せていない(関数呼び出しのためには丸括弧()が必要です)
onChange="imgInput()"などとする必要があります。この時、任意のパラメータを渡すことができます。(おすすめは="imgInput(this)")
・JQueryの関数propが使用されている
someJQueryObject.prop("AnyPropery")someDOMObject.AnyPropertyとすることができるはずです。

投稿2019/03/08 00:36

moredeep

総合スコア1507

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

marion

2019/03/08 11:57

おすすめ教えていただきありがとうございます。someDOMObjectと併せて調べてみます。ありがとうございます。
marion

2019/03/20 08:14

大変迷ったのですが、今回は勉強が目的だったので、問題点・おすすめをくださったmoredeepさんをベストアンサーとさせていただきました。 皆様ありがとうございました。
guest

0

コンソールにログが出てない
というならログが出るようにする
例えば
file = this.prop('files')[0];
の後に
console.log(file)
を入れてちゃんとfileが取れているか確認する
コンソールにエラーが出るだけ確認ではなくちゃんとデータがとれているかのログを出力して確認しながら作るようにしてみて下さい

投稿2019/03/08 00:30

編集2019/03/08 00:37
date

総合スコア1820

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

marion

2019/03/08 11:50

それぞれコンソールログで確認するようにしたら進みました。初歩的なことでお恥ずかしいですが、教えていただけて良かったです。ありがとうございます。
guest

0

js

1if (file.type == 'image/jpeg', file.type == 'image/png') { 2}

という部分がjQueryのコードと違っています。
カンマ演算子は最後の条件を返しますので、この書き方だと、png画像はアップロードできないのではないでしょうか?

投稿2019/03/08 00:22

noka_blank

総合スコア252

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

marion

2019/03/08 11:54 編集

if (file.type == 'image/jpeg'||file.type == 'image/png') { } にしてみました。ありがとうございました。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問