2

私のコード

var transformString = Modernizr.prefixed('transform');
var inputDown, inputMove, inputUp;


if (window.Touch) {
  inputDown = "touchstart";
  inputMove = "touchmove";
  inputUp = "touchend";
}
else {
  inputDown = "mousedown";
  inputMove = "mousemove";
  inputUp = "mouseup";
}

var mouse = { startX: 0, startY: 0 };
var innerElement = $('.threedee');

function normalizedX(event){
    return window.Touch ? event.originalEvent.touches[0].pageX : event.pageX;
}    

function normalizedY(event){
    return window.Touch ? event.originalEvent.touches[0].pageY : event.pageY;
}

$(document).bind(inputDown, function(event){
  event.preventDefault();
  if(event.button === 2) return true; // right-click
  mouse.startX = normalizedX(event);
  mouse.startY = normalizedY(event);
  // store the transform state
  // globalMatrix.setMatrixValue($inner.css('-webkit-transform'));
  $(document)
   .bind(inputMove, move)
   .one(inputUp, function(){ $(document).unbind(inputMove); });
});

function move(event){
  event.preventDefault();
  var offsetX = normalizedX(event) - mouse.startX;
  var offsetY = normalizedY(event) - mouse.startY;
  if(event.shiftKey){
   offsetX = roundToMultiple(offsetX, 15);
   offsetY = roundToMultiple(offsetY, 15);
  }
  innerElement.css(transformString, 'rotateY('+offsetX+'deg) rotateX('+-offsetY+'deg)');
  /* move relative to the initial position
  $inner.css('-webkit-transform', globalMatrix.rotate(-offsetY, offsetX, 0));//*/
}

function roundToMultiple(number, multiple){
  var value = number/multiple
  ,   integer = Math.floor(value)
  ,   rest = value - integer;
  return rest > 0.5 ? (integer+1)*multiple : integer*multiple;
}​

javascriptの部分だけを見てみてください、私の問題はそこにあります。

なぜ「イベント」がスクリプト内のほとんどの関数のパラメーターおよび引数として渡されるのか疑問に思います。時々それは「e」でもあるかもしれません。誰がそれらを作成しましたか?

私自身、この「イベント」変数を担当する「イベント」変数を作成したことはありません。

4

3 に答える 3

9

jQueryはイベント関数を呼び出し、イベントオブジェクトを引数に渡します。変数の作成について心配する必要はありません。引数には任意の名前を付けることができます(有効な変数名であると想定)。

イベントオブジェクトの作成は「ブラックボックス」と見なす必要があり、その正確な構造や実装について心配する必要はありません。ドキュメントと例で示されていることを実行するだけで、大丈夫です。

ただし、重要なのは関数にパラメーターを含めることです。そうしないと、jQueryが渡すイベントオブジェクトにアクセスできなくなります。

他のいくつかの回答が述べているように、名前を避けることはおそらく良い考えeventです。注意しないと、特定のブラウザで同じ名前のグローバル変数と競合する可能性があるためです。代わりに、eまたは同様のものを使用するとNameError、関数にパラメーターを含めるのを忘れた場合にが表示されます。

// Wrong way #1
$('.class').bind('click', function() {
    event.preventDefault();    // may attempt to call .preventDefault() on window.event if it exists
});

// Wrong way #2 (fails fast since e probably won't be on the global object)
$('.class').bind('click', function() {
    e.preventDefault();        // ReferenceError thrown here
});

// The correct way
$('.class').bind('click', function(e) {    // or (event) if you want, but the first example can bite you
    e.preventDefault();        // no problem
});
于 2012-08-07T19:30:40.867 に答える
6

jQueryは、正規化され、バグが修正され、機能化されたjQueryイベントオブジェクトを最初のパラメーターとしてハンドラー関数に渡します。このパラメーターe(または同様の名前)に名前を付けて、誤ってグローバルwindow.event(chromeおよびIEのネイティブイベントオブジェクト)を参照し、代わりにクイックエラーが発生しないようにする必要があります。

于 2012-08-07T19:30:01.983 に答える
1

コールバック関数を参照する関数eまたはeventコールバック関数です。これらは基本的にjQuery自体によって呼び出され、結果として変数を渡します(ここで関数を定義しますが、定義されていると仮定して呼び出します)。eそのため、またはとして定義eventできます(それも可能性がありpurple_elephantます)。

参照: http: //en.wikipedia.org/wiki/Callback_ (computer_programming )

于 2012-08-07T19:30:29.620 に答える