Javascript の私の基盤は最強ではありません。私が自分のために作成した現在の課題について、他の人がどのように対処するのか興味があります。
paper.jsで遊んでいます
次のコードはこれを作成します
目は、ここの目と同じようにマウス イベントに反応します (そのコードから学習) — www.arc.id.au/XEyes.html
ここに私が持っているものがあります:
// Eye position center
eCntrX = 100
eCntrY = 100
var topLid = new Path()
topLid.add(new Point(eCntrX - 60, eCntrY))
topLid.add(new Point(eCntrX, eCntrY - 28))
topLid.add(new Point(eCntrX + 60, eCntrY))
topLid.add(new Point(eCntrX, eCntrY + 28))
topLid.strokeWidth = '6'
topLid.strokeColor = '#000'
topLid.closed = true
topLid.smooth()
var iris = new Path.Circle(eCntrX, eCntrY, 24)
iris.fillColor = '#6CE0FF'
iris.strokeWidth = '6'
iris.strokeColor = '#000'
var pupil = new Path.Circle(eCntrX, eCntrY, 15)
pupil.fillColor = '#000'
var glint = new Path.Circle(eCntrX, eCntrY, 5)
glint.fillColor = '#fff'
glint.position = new Point(eCntrX + 6, eCntrY - 6)
var ball = new Group([iris, pupil, glint])
function onMouseMove(event) {
  // Cursor position
  var csrX = event.point.x
  var csrY = event.point.y
  // Ball position
  var ballX = ball.position.x
  var ballY = ball.position.y
  // Displacement
  var dx = csrX - ballX
  var dy = csrY - ballY
  //Radius
  var r = 5
  //Pythagerous thereom calcs. R
  var R = Math.sqrt(dx*dx+dy*dy)
  x = dx*r/R
  y = dy*r/R
  ball.position = new Point(eCntrX + x, eCntrY + y)
  // console.log('x:' + x + 'y:' + y)
}
ページ全体を目で埋めようとしています。私の最終目標は、次のようなものを作成することです。

私の質問は、インタラクティブな複数の目を作成するための最良の方法は何かということです。
「for」をいじってみましたが、onMouseMove 関数は最後に作成された Eye にのみ適用されます。
paperjs item.clone も検討しています — paperjs.org/reference/item#clone
それとも、それぞれの目に固有の変数を作成するのは私の問題ですか?
要求された for を使用したコードは次のとおりです。
for(var i = 0; i < 10; i++){
  // Eye position center
  // 100, 300, 500, 600
  eCntrX = 100 * i + 100
  eCntrY = 100
  var topLid = new Path()
  topLid.add(new Point(eCntrX - 60, eCntrY))
  topLid.add(new Point(eCntrX, eCntrY - 28))
  topLid.add(new Point(eCntrX + 60, eCntrY))
  topLid.add(new Point(eCntrX, eCntrY + 28))
  topLid.strokeWidth = '6'
  topLid.strokeColor = '#000'
  topLid.closed = true
  topLid.smooth()
  var iris = new Path.Circle(eCntrX, eCntrY, 24)
  iris.fillColor = '#6CE0FF'
  iris.strokeWidth = '6'
  iris.strokeColor = '#000'
  var pupil = new Path.Circle(eCntrX, eCntrY, 15)
  pupil.fillColor = '#000'
  var glint = new Path.Circle(eCntrX, eCntrY, 5)
  glint.fillColor = '#fff'
  glint.position = new Point(eCntrX + 6, eCntrY - 6)
  var ball = new Group([iris, pupil, glint])
}
function onMouseMove(event) {
    // Cursor position
    var csrX = event.point.x
    var csrY = event.point.y
    // Ball position
    var ballX = ball.position.x
    var ballY = ball.position.y
    // Displacement
    var dx = csrX - ballX
    var dy = csrY - ballY
    //Radius
    var r = 5
    //Pythagerous thereom calcs. R
    var R = Math.sqrt(dx*dx+dy*dy)
    x = dx*r/R
    y = dy*r/R
    ball.position = new Point(eCntrX + x, eCntrY + y)
    console.log('x:' + x + 'y:' + y)
}