前提・実現したいこと
先日からこちらのサイトのTOPの文字がマウスカーソルの位置によって移動するところを実装しています。
発生している問題・エラーメッセージ
文字がマウスカーソルの位置に応じて動く部分までは実装できたのですが、そこからその動きに慣性をつけるやり方が見当がつきません。
エラーメッセージ
該当のソースコード
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': 1144, 'pointY': 333, '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': 1097, 'pointY': 605, 'angle': 20, 'font_size': '120px Fredoka One', 'color': 'rgba(88, 56, 34, 1)', 'value': 'c'}, 10 'brown_H' : {'pointX': -118, 'pointY': 290, 'angle': 340, 'font_size': '330px Fredoka One', 'color': 'rgba(88, 56, 34, 1)', 'value': 'H'}, 11 'brown_i' : {'pointX': 1269, 'pointY': 714, 'angle': 20, 'font_size': '230px Fredoka One', 'color': 'rgba(88, 56, 34, 1)', 'value': 'i'}, 12 'brown_M' : {'pointX': 430, 'pointY': 12, 'angle': 20, 'font_size': '240px Fredoka One', 'color': 'rgba(88, 56, 34, 1)', 'value': 'M'}, 13 'brown_p' : {'pointX': 1321, 'pointY': 656, 'angle': -10, 'font_size': '200px Fredoka One', 'color': 'rgba(88, 56, 34, 1)', 'value': 'p'}, 14 'brown_P_1' : {'pointX': 669, 'pointY': 0, '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': 342, 'pointY': 656, 'angle': -20, 'font_size': '120px Fredoka One', 'color': 'rgba(88, 56, 34, 1)', 'value': 's'}, 18 'brown_T' : {'pointX': 209, '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// 描画用関数 24function draw_canvas() { 25 26 // TOP部分の描画コンテキスト取得 27 var canvas = document.getElementById('top_canvas'); 28 29 // 描画範囲設定 30 canvas.width = window.innerWidth; 31 canvas.height = 1900; 32 33 // コンテキスト取得 34 if (canvas.getContext) { 35 var context_brown = canvas.getContext('2d'); // 茶色文字用コンテキスト 36 } 37 38 context_brown.textAlign = "left"; 39 context_brown.textBaseline = "top"; 40 41 // 茶色文字描画 42 for (let i = 0; i <= brown_text_name.length - 1; i++) { 43 44 context_brown.save(); 45 46 var x = brown_text[brown_text_name[i]]['pointX']; 47 var y = brown_text[brown_text_name[i]]['pointY']; 48 context_brown.font = brown_text[brown_text_name[i]]['font_size']; 49 context_brown.fillStyle = brown_text[brown_text_name[i]]['color']; 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 60ar preX = 0; 61var preY = 0; 62 63// 文字の移動用 64window.onload=function(){ 65 66 draw_canvas(); // フォント反映 67 68 //マウス移動時のイベントをBODYタグに登録する 69 document.body.addEventListener("mousemove", function(e){ 70 71 //座標を取得する 72 var mX = e.pageX; //X座標 73 var mY = e.pageY; //Y座標 74 75 var cX = e.pageX; 76 var cY = e.pageY; 77 78 var mX = preX - cX; 79 var mY = cY - preY; 80 81 preX = cX; 82 preY = cY; 83 84 var c = 100; // 補正変数 85 86 for (let i = 0; i <= brown_text_name.length - 1; i++) { 87 brown_text[brown_text_name[i]]['pointX'] += mX / c; 88 brown_text[brown_text_name[i]]['pointY'] += mY / c; 89 } 90 91 draw_canvas(); // 再描画 92 }); 93}
試したこと
https://qiita.com/edo_m18/items/f0587c3bcd4fb8e2bc50
こちらのサイトを見ながら色々検討してみたのですが、どうにもやり方が見えてきません
回答1件
あなたの回答
tips
プレビュー