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

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

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

HTML5の<canvas>要素用のタグです。CanvasはHTML5から導入された、二次元の図形描写が可能な要素です。

JavaScript

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

jQuery

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

Q&A

解決済

1回答

1383閲覧

読みやすいコードにしたい

squee

総合スコア11

canvas

HTML5の<canvas>要素用のタグです。CanvasはHTML5から導入された、二次元の図形描写が可能な要素です。

JavaScript

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

jQuery

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

0グッド

0クリップ

投稿2017/01/27 18:59

編集2017/01/28 04:38

ここに質問したいことを詳細に書いてください

エリアを2つに分けたとして、片方のエリア(アイテム)に設置したある画像をクリックするともう片方のエリア(canvas)に少し大きなサイズの同じ画像を描画しようと考えています。

画像の数が増えた場合の事を考えて、配列や関数を使い同じ処理を行わないようにしたいと思っています。

###発生している問題・エラーメッセージ
エラーは特に起こっていません。

###該当のソースコード

<div id="container"> <!--canvasエリア --> <canvas id="canvas"></canvas> <!--アイテム --> <div id="item"> <img class="imgs" id="img01" src="xxx/thum/01.jpg" alt="サムネ01"> <img class="imgs" id="img02" src="xxx/thum/02.jpg" alt="サムネ02"> </div>
スクリプト $(function() { var canvas = $('#canvas')[0]; var context = canvas.getContext("2d"); var imgList = new Array( "xxx/01.jpg", "xxx/02.jpg" ); $('.imgs').each(function() { var img = $(this); img.click = targetImage; }) function targetImage () { for(var i=0; i<imgList.length; i++) { context.drawImage(imgList[i], 10, 10); } } }

###試したこと

片方のエリア(アイテム)にある画像それぞれにクリックイベントを指定すればcavasに描画する事までは出来ました。

var item = $('#item'); var img01 = item.find('#img01'); var image = new Image(); image.src = "xxx/01.jpg"; img01.click(function() { context.drawImage(image, 10, 10); })

###補足情報(言語/FW/ツール等のバージョンなど)
配列への変換がおかしいのか、関数化に失敗しているのか原因が突き止められず非常に悔しいです。
お力をお貸し下さい。宜しくお願い致します。

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

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

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

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

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

退会済みユーザー

退会済みユーザー

2017/01/27 23:25

質問文のコードはコードブロックで囲んでいただけませんか? ```(バッククオート3つ)で囲み、前後に改行をいれるか、コードを選択して「<code>」ボタンを押すとコードブロックになります。
guest

回答1

0

ベストアンサー

JavaScript

1$(function() { 2 var canvas = $('#canvas')[0]; 3 var context = canvas.getContext("2d"); 4 5 // サムネイルのid → canvasに表示する画像のsrcへのマップ 6 var imgMap = { 7 "img01" : "img/01.jpg", 8 "img02" : "img/02.jpg" 9 }; 10 11 $('.imgs').on('click', function() { 12 // サムネイルのidを取得 13 var thumbnailId = $(this).attr('id'); 14 // サムネイルのidからcanvasに表示する画像のsrcに変換 15 var imgSrc = imgMap[thumbnailId]; 16 17 var image = new Image(); 18 image.src = imgSrc; 19 context.drawImage(image, 10, 10); 20 }); 21});

投稿2017/01/27 21:41

naomi3

総合スコア1105

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

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

squee

2017/01/28 04:26

解決して頂きありがとうございました。 naomi3様のコードを実際に書いて、思い通りの実行結果も得られました。 ずっと悩んでいたので、teratailを使ってみて本当に良かったです。 手元にある参考書に、「それぞれについて処理をする」というeachメソッドに関する記載が あったので試してみましたが、eachメソッドでは出来ないようですね。 ソースコードのロジックを勉強させて頂き、自分のものに出来るようにします。 ありがとうございました。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問