前提・実現したいこと
現在HTMLのcanvasを勉強しています。
下の画像はAdobeXDのデザインデータで作ったデザインで、こちらを目標として色々試していますがrotateがうまく扱えません。
発生している問題・エラーメッセージ
rotateとtranslateを使用することはわかりますが、うまく目標に近づけることができません。
saveやrestoreなどもどこに書けばいいのか見当がつきません。
該当のソースコード
Javascript
1const brown_text_name = ['brown_a_1', 'brown_a_2', 'brown_c', 'brown_H', 'brown_i', 'brown_M', 'brown_p', 2'brown_P_1', 'brown_P_2', 'brown_s_1', 'brown_s_2', 'brown_T', 'brown_v']; 3 4// 茶色文字?の設定(X座標、Y座標、角度、フォントの種類&サイズ, 色, 出力文字) 5var brown_text = { 6 7 'brown_a_1' : {'pointX': 1044, 'pointY': 373, 'angle': 20,'font_size': '200px Fredoka One', 'color': 'rgba(88, 56, 34, 1)', 'value': 'a'}, 8 'brown_a_2' : {'pointX': 823, 'pointY': 427, 'angle': -20, 'font_size': '120px Fredoka One', 'color': 'rgba(88, 56, 34, 1)', 'value': 'a'}, 9 'brown_c' : {'pointX': 1087, 'pointY': 645, 'angle': 20, 'font_size': '120px Fredoka One', 'color': 'rgba(88, 56, 34, 1)', 'value': 'c'}, 10 'brown_H' : {'pointX': -58, 'pointY': 290, 'angle': 340, 'font_size': '330px Fredoka One', 'color': 'rgba(88, 56, 34, 1)', 'value': 'H'}, 11 'brown_i' : {'pointX': 1259, 'pointY': 754, 'angle': 20, 'font_size': '230px Fredoka One', 'color': 'rgba(88, 56, 34, 1)', 'value': 'i'}, 12 'brown_M' : {'pointX': 319, 'pointY': 74, 'angle': 20, 'font_size': '240px Fredoka One', 'color': 'rgba(88, 56, 34, 1)', 'value': 'M'}, 13 'brown_p' : {'pointX': 1381, 'pointY': 656, 'angle': -10, 'font_size': '200px Fredoka One', 'color': 'rgba(88, 56, 34, 1)', 'value': 'p'}, 14 'brown_P_1' : {'pointX': 669, 'pointY': -45, 'angle': -25, 'font_size': '350px Fredoka One', 'color': 'rgba(88, 56, 34, 1)', 'value': 'P'}, 15 'brown_P_2' : {'pointX': 1074, 'pointY': 113, 'angle': -25, 'font_size': '230px Fredoka One', 'color': 'rgba(88, 56, 34, 1)', 'value': 'P'}, 16 'brown_s_1' : {'pointX': 414, 'pointY': 496, 'angle': -30, 'font_size': '270px Fredoka One', 'color': 'rgba(88, 56, 34, 1)', 'value': 's'}, 17 'brown_s_2' : {'pointX': 312, 'pointY': 716, 'angle': -20, 'font_size': '120px Fredoka One', 'color': 'rgba(88, 56, 34, 1)', 'value': 's'}, 18 'brown_T' : {'pointX': 169, 'pointY': 178, 'angle': -20, 'font_size': '150px Fredoka One', 'color': 'rgba(88, 56, 34, 1)', 'value': 'T'}, 19 'brown_v' : {'pointX': 927, 'pointY': 311, 'angle': -20, 'font_size': '150px Fredoka One', 'color': 'rgba(88, 56, 34, 1)', 'value': 'v'}, 20 21}; 22 23$(document).ready(function() { 24 25 // TOP部分の描画コンテキスト取得 26 var canvas = document.getElementById('top_canvas'); 27 28 // 描画範囲設定 29 canvas.width = window.innerWidth; 30 canvas.height = 1900; 31 32 // コンテキスト取得 33 if (canvas.getContext) { 34 var context_brown = canvas.getContext('2d'); // 茶色文字用コンテキスト 35 } 36 37 context_brown.textAlign = "center"; 38 context_brown.textBaseline = "middle"; 39 40 context_brown.save(); 41 42 for (let i = 0; i <= brown_text_name.length-1; i++) { 43 44 var x = brown_text[brown_text_name[i]]['pointX']; 45 var y = brown_text[brown_text_name[i]]['pointY']; 46 context_brown.font = brown_text[brown_text_name[i]]['font_size']; 47 context_brown.fillStyle = brown_text[brown_text_name[i]]['color']; 48 49 // context_brown.translate(x, y); 50 // context_brown.rotate(brown_text[brown_text_name[i]]['angle'] * Math.PI / 180); 51 context_brown.fillText(brown_text[brown_text_name[i]]['value'], x, y); 52 // context_brown.rotate((brown_text[brown_text_name[i]]['angle'] * (-1)) * Math.PI / 180); 53 context_brown.restore(); 54 55 console.log(brown_text[brown_text_name[i]]['value'], x, y); 56 } 57}
試したこと
ソースコードのとおり描画するテキストを連想配列で定義し、for文で各値を連想配列から取得して描画しています。
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2020/05/10 23:17