2011.06.15 achamaro
最近新しいPCを買ってもらいました。
PCの引っ越しをしていると懐かしいソースを発見したので
晒してみようと思います。
/** * マウス追跡 * * * @param element target 追跡させるエレメント * @param float spring 弾力定数 * @param function func コールバック関数 */ var MChase = function (target, spring, func) { // X軸速度 var fx = 0; // Y軸速度 var fy = 0; // マウス座標X var mx = false; // マウス座標Y var my = false; // ターゲット座標X var tx; // ターゲット座標Y var ty; // 弾力定数 if (!spring) spring = 1; // タイマーID var tmid; ///////////////////////////////////// // 初期値算出 // 現在ターゲット座標 tx = parseInt(target.css("left")); ty = parseInt(target.css("top")); ///////////////////////////////////// // イベント設定 // マウスムーブイベント設定 // マウスが移動する毎にマウス座標を変更 $(window).bind("mousemove", function (e) { mx = e.pageX; my = e.pageY; } ); // マウスオーバーイベントにコールバック関数を設定 if (func) { target.bind("mouseover", function () { func(); } ); // アンロード時イベント削除 $(window).unload(function () { target.unbind(); }); } ///////////////////////////////////// // 50ms毎に移動処理 tmid = setInterval(function () { // マウス座標がある場合処理継続 if (!mx || !my) return; // ばねX軸速度 px/50ms 弾力定数spring,距離単位pxとした時、1sでFpx移動するとして算出 sx = (mx - tx) * 0.050 * spring; // ばねY軸速度 px/50ms sy = (my - ty) * 0.050 * spring; // 現在の速度ベクトルに抵抗を加える fx *= 0.9; fy *= 0.9; // 現在の速度ベクトルと弾性力から出した速度ベクトルを合成 fx += sx; fy += sy; // 座標算出 tx += fx; ty += fy; // 描画 target.css({top:ty+"px",left:tx+"px"}); }, 50); return tmid; }そのまま素直に
MChase($('hogehoge'));としたところ、マウスの位置がずれていましたw
MChase($("").css({position:"absolute",cursor:"default"}).text('acha_maro').appendTo("body"),1.5);ファイルのタイムスタンプを見ると2010/05/12