1

以下のjsfiddleサンプルを取得して、黄色の円のdivをマウスに追従 させますが、正方形(div)ではなく円に制約します。

http://jsfiddle.net/fhmkf/

JS コードは次のようになります。

var mouseX = 0, mouseY = 0, limitX = 150-15, limitY = 150-15;
$(window).mousemove(function(e){
   mouseX = Math.min(e.pageX, limitX);
   mouseY = Math.min(e.pageY, limitY);
});

// cache the selector
var follower = $("#follower");
var xp = 0, yp = 0;
var loop = setInterval(function(){
    // change 12 to alter damping higher is slower
    xp += (mouseX - xp) / 12;
    yp += (mouseY - yp) / 12;
    follower.css({left:xp, top:yp});

}, 30);

コードの構造と方法論は理解していますが、構文にはあまり詳しくありません。

を更新して追加の ,変数limitX/Yを投入するのに最適な場所はどこですか?radiusdistance

4

1 に答える 1

2

これを行うには、円の中心からの距離を計算します (2D 距離は で計算されます)。次に、拘束したい円の半径よりも距離が大きいかどうかを確認します。そうである場合は、制限半径に合わせて距離を縮小します。Math.sqrt(x * x + y * y)

スニペットは次のとおりです。

var mouseX = 0, mouseY = 0, limitX = 150-15, limitY = 150-15;
var centerX = limitX / 2, centerY = limitY / 2;
var radius = centerX;
$(window).mousemove(function(e) {
   var diffX = e.pageX - centerX;
   var diffY = e.pageY - centerY;

   // Get the mouse distance from the center
   var r = Math.sqrt(diffX * diffX + diffY * diffY);

   if (r > radius) {
     // Scale the distance down to length 1 
     diffX /= r;
     diffY /= r;

     // Scale back up to the radius
     diffX *= radius;
     diffY *= radius;
   }

   mouseX = centerX + diffX;
   mouseY = centerY + diffY;
});

そして、ここに完全なコードがあります: http://jsfiddle.net/fhmkf/

于 2013-10-05T16:59:57.803 に答える