前提・実現したいこと
こちらのサイトのトップ部分のマウスカーソル位置に応じて文字が動く部分をcanvasを用いて実装しようとしています。
発生している問題・エラーメッセージ
文字を動かすことまではできたのですが、思うように右・左と思うように動かすことができません。
該当のソース
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 4var brown_text = { 5 6// 描画する文字の各座標・角度・フォント(サイズ・種類)・色・値 7 8 'brown_a_1' : {'pointX': 1144, 'pointY': 333, 'angle': 20, 'font_size': '200px Fredoka One', 'color': 'rgba(88, 56, 34, 1)', 'value': 'a'}, 9 'brown_a_2' : {'pointX': 823, 'pointY': 427, 'angle': -20, 'font_size': '120px Fredoka One', 'color': 'rgba(88, 56, 34, 1)', 'value': 'a'}, 10 'brown_c' : {'pointX': 1097, 'pointY': 605, 'angle': 20, 'font_size': '120px Fredoka One', 'color': 'rgba(88, 56, 34, 1)', 'value': 'c'}, 11 'brown_H' : {'pointX': -118, 'pointY': 290, 'angle': 340, 'font_size': '330px Fredoka One', 'color': 'rgba(88, 56, 34, 1)', 'value': 'H'}, 12 'brown_i' : {'pointX': 1269, 'pointY': 714, 'angle': 20, 'font_size': '230px Fredoka One', 'color': 'rgba(88, 56, 34, 1)', 'value': 'i'}, 13 'brown_M' : {'pointX': 430, 'pointY': 12, 'angle': 20, 'font_size': '240px Fredoka One', 'color': 'rgba(88, 56, 34, 1)', 'value': 'M'}, 14 'brown_p' : {'pointX': 1321, 'pointY': 656, 'angle': -10, 'font_size': '200px Fredoka One', 'color': 'rgba(88, 56, 34, 1)', 'value': 'p'}, 15 'brown_P_1' : {'pointX': 669, 'pointY': 0, 'angle': -25, 'font_size': '350px Fredoka One', 'color': 'rgba(88, 56, 34, 1)', 'value': 'P'}, 16 'brown_P_2' : {'pointX': 1074, 'pointY': 113, 'angle': -25, 'font_size': '230px Fredoka One', 'color': 'rgba(88, 56, 34, 1)', 'value': 'P'}, 17 'brown_s_1' : {'pointX': 414, 'pointY': 496, 'angle': -30, 'font_size': '270px Fredoka One', 'color': 'rgba(88, 56, 34, 1)', 'value': 's'}, 18 'brown_s_2' : {'pointX': 342, 'pointY': 656, 'angle': -20, 'font_size': '120px Fredoka One', 'color': 'rgba(88, 56, 34, 1)', 'value': 's'}, 19 'brown_T' : {'pointX': 209, 'pointY': 178, 'angle': -20, 'font_size': '150px Fredoka One', 'color': 'rgba(88, 56, 34, 1)', 'value': 'T'}, 20 'brown_v' : {'pointX': 927, 'pointY': 311, 'angle': -20, 'font_size': '150px Fredoka One', 'color': 'rgba(88, 56, 34, 1)', 'value': 'v'}, 21 22}; 23 24$(document).ready(function() { 25 draw_canvas(); 26}); 27 28function draw_canvas() { 29// TOP部分の描画コンテキスト取得 30var canvas = document.getElementById('top_canvas'); 31 32// 描画範囲設定 33canvas.width = window.innerWidth; 34canvas.height = 1900; 35 36// コンテキスト取得 37if (canvas.getContext) { 38 var context_brown = canvas.getContext('2d'); // 茶色文字用コンテキスト 39} 40 41// 茶色文字描画 42for (let i = 0; i <= brown_text_name.length - 1; i++) { 43 context_brown.save(); 44 45 var x = brown_text[brown_text_name[i]]['pointX']; 46 var y = brown_text[brown_text_name[i]]['pointY']; 47 context_brown.font = brown_text[brown_text_name[i]]['font_size']; 48 context_brown.fillStyle = brown_text[brown_text_name[i]]['color']; 49 50 context_brown.translate(x, y); 51 context_brown.rotate((brown_text[brown_text_name[i]]['angle'] ) * Math.PI / 180); 52 context_brown.translate(-x, -y); 53 context_brown.fillText(brown_text[brown_text_name[i]]['value'], x, y); 54 55 context_brown.restore(); 56 57} 58 59} 60 61window.onload=function(){ 62 //マウス移動時のイベントをBODYタグに登録する 63 document.body.addEventListener("mousemove", function(e){ 64 65 //座標を取得する 66 var mX = e.pageX; //X座標 67 var mY = e.pageY; //Y座標 68 69 //座標を表示する 70 document.getElementById("txtX").value = mX; // 確認用 71 document.getElementById("txtY").value = mY; // 確認用 72 brown_text['brown_a_1']['pointX'] += (mX - window.innerWidth) / 10; 73 brown_text['brown_a_1']['pointY'] = mY; 74 75 console.log(brown_text['brown_a_1']['pointX'], brown_text['brown_a_1']['pointY']); 76 draw_canvas(); 77 }); 78} 79
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2020/05/16 02:09