jQuery:マウスイベントによるオフセット位置

シロック

現在、jQueryの演習としてブロックブレーカーをコーディングしていますが、左側のプレイフィールドを離れると位置が変わるラケットに問題があります。

私はすべてのマウスイベントに慣れていないので、スタックオーバーフローやインターネットで見つけた多くの解決策やアイデアを試し、コード全体を変更しましたが、正しい位置にあることがわかった唯一の方法は条件を作成することですオフセットを修正するには、mouseleaveイベントを使用します。しかし、マウスがプレイフィールドの上または下にあると、それを行う前に持っていなかった位置の問題が増えるため、私はそれが好きではありません。

おそらくこれの2番目の部分が機能しないのですが、変更する方法がわかりません。

racket.left = Math.min(canvasWidth - racket.width, Math.max(2, e.offsetX));

私が何を意味するかについては、JSFiddleを参照してください:https://jsfiddle.net/Shilok/29wu6gj8/1/

右側と同じ動作が必要です。ラケットがいずれかの側に触れ、マウスがプレイフィールドの外にある場合、ラケットはそのままの位置に留まります(側面に貼り付けられています)。

何か案は?

ガブリエレペトリオーリ

もう少し必要です

  1. 使用するイベントのoffsetXは、ホバーしている要素によって異なります。pageX代わりに、ドキュメント全体に対して常に左を返すを使用して、これを正規化する必要があります。
  2. 0を下回らないようMath.minに、Math.maxaでラップする必要があります
  3. .canvasそれ自体のオフセットを考慮する必要があります。
  4. またresize、ウィンドウのイベントでオフセットを再計算する必要があります

var canvasWidth, racket, canvasOffset;

$(document).ready(init);

function init() {
  $(window).resize(calculate).trigger('resize');
  $(window).on('mousemove', moveRacket);
}

function calculate() {
  canvasWidth = $('.canvas').width();
  racket = {
    width: $(".racket").width()
  };
  canvasOffset = $('.canvas').offset()
}

function moveRacket(e) {
  var minLeft = Math.max(0, e.pageX - canvasOffset.left - racket.width / 2),
    maxLeft = canvasWidth - racket.width;

  racket.left = Math.max(Math.min(maxLeft, minLeft), 0);
  $('.racket').css('left', racket.left + 'px');
}
html {
  width: 100%;
  height: 100%;
}

body {
  display: flex;
  justify-content: center;
}

.canvas {
  position: absolute;
  background: green;
  width: 500px;
  height: 200px;
}

.racket {
  position: absolute;
  width: 100px;
  height: 14px;
  bottom: 12px;
  left: 0;
  background: black;
}
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<div class="canvas">
  <div class="racket"></div>
</div>


https://jsfiddle.net/0p9ke2wa/でフィドルを更新しました

この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。

侵害の場合は、連絡してください[email protected]

編集
0

コメントを追加

0

関連記事

分類Dev

ベースラインオフセットのあるレイアウトUILabel

分類Dev

CSS変換によるマウス位置の破壊イベント

分類Dev

jqueryウェイポイント「アップ」イベントの異なるオフセット

分類Dev

jQuery:イベント「マウスオーバー」のような

分類Dev

Mousemoveイベント:親要素に対するマウスの位置

分類Dev

JavaScriptによるタッチイベントとマウスイベントのマッピング

分類Dev

キャンバス上でマウス座標を取得することによる境界オフセット

分類Dev

反応キャンバスにオフセットエラーを与えるmouseclickおよびmousemoveイベント

分類Dev

マウスイベントによるベジェ曲線

分類Dev

オフセット付きのマウス位置

分類Dev

マウスダウンイベントでチェックボックスをオンにするにはどうすればよいですか?

分類Dev

Javaでのダブルクリックによるマウスイベント

分類Dev

マウスオーバーまたはdivのイベントをクリックしたときにフェードアウトをブロックする

分類Dev

オフセットLVMマウント

分類Dev

JavaFX 8でイベント位置によってマウスがドラッグされている間にノードを取得する方法は?

分類Dev

マウスカーソルの位置でズームインするためのビューオフセットの計算

分類Dev

Gitサインオフ-カスタムフォーマットによる

分類Dev

Gitサインオフ-カスタムフォーマットによる

分類Dev

マウスオーバーイベントでd3円グラフにテキストを追加する

分類Dev

null伝播によるイベント発生のスレッドセーフ

分類Dev

マウスアップイベントに問題がある

分類Dev

uiハッシュにアクセスするマリオネット埋め込みイベント

分類Dev

事前にスケーリングされたハードウェアタイマーにオフセットを追加するときに、このオフバイワンエラーを回避するにはどうすればよいですか?

分類Dev

イベント後にマウス位置の値を返す方法

分類Dev

jQuery:マウスオーバー中に画像をフェードインし、マウスアウトするとフェードアウトします

分類Dev

遅延のあるJavaScript / jQueryマウスオーバーイベント

分類Dev

jqueryで5回目のマウスオーバー後に画像が変化するmouseoverイベント

分類Dev

Jqueryマウスオーバーイベント

分類Dev

イベントなしで(マウスを移動せずに)マウスの位置を取得する方法は?

Related 関連記事

  1. 1

    ベースラインオフセットのあるレイアウトUILabel

  2. 2

    CSS変換によるマウス位置の破壊イベント

  3. 3

    jqueryウェイポイント「アップ」イベントの異なるオフセット

  4. 4

    jQuery:イベント「マウスオーバー」のような

  5. 5

    Mousemoveイベント:親要素に対するマウスの位置

  6. 6

    JavaScriptによるタッチイベントとマウスイベントのマッピング

  7. 7

    キャンバス上でマウス座標を取得することによる境界オフセット

  8. 8

    反応キャンバスにオフセットエラーを与えるmouseclickおよびmousemoveイベント

  9. 9

    マウスイベントによるベジェ曲線

  10. 10

    オフセット付きのマウス位置

  11. 11

    マウスダウンイベントでチェックボックスをオンにするにはどうすればよいですか?

  12. 12

    Javaでのダブルクリックによるマウスイベント

  13. 13

    マウスオーバーまたはdivのイベントをクリックしたときにフェードアウトをブロックする

  14. 14

    オフセットLVMマウント

  15. 15

    JavaFX 8でイベント位置によってマウスがドラッグされている間にノードを取得する方法は?

  16. 16

    マウスカーソルの位置でズームインするためのビューオフセットの計算

  17. 17

    Gitサインオフ-カスタムフォーマットによる

  18. 18

    Gitサインオフ-カスタムフォーマットによる

  19. 19

    マウスオーバーイベントでd3円グラフにテキストを追加する

  20. 20

    null伝播によるイベント発生のスレッドセーフ

  21. 21

    マウスアップイベントに問題がある

  22. 22

    uiハッシュにアクセスするマリオネット埋め込みイベント

  23. 23

    事前にスケーリングされたハードウェアタイマーにオフセットを追加するときに、このオフバイワンエラーを回避するにはどうすればよいですか?

  24. 24

    イベント後にマウス位置の値を返す方法

  25. 25

    jQuery:マウスオーバー中に画像をフェードインし、マウスアウトするとフェードアウトします

  26. 26

    遅延のあるJavaScript / jQueryマウスオーバーイベント

  27. 27

    jqueryで5回目のマウスオーバー後に画像が変化するmouseoverイベント

  28. 28

    Jqueryマウスオーバーイベント

  29. 29

    イベントなしで(マウスを移動せずに)マウスの位置を取得する方法は?

ホットタグ

アーカイブ