キャンバス内の実際のマウス位置
マウス カーソルを使用して HTML5 キャンバス内に描画するには、多くの場合、キャンバスを原点 (0,0) に配置することが必須です。 ) 親コンテナ内。ただし、キャンバスの位置が原点から離れて調整されると、描画時に不一致が発生する可能性があります。
単純な 1:1 シナリオ
キャンバス要素の寸法がビットマップ サイズ (1) と完全に一致している場合:1 の比率)、次のスニペットを使用してマウスの位置をキャプチャします:
function getMousePos(canvas, evt) { var rect = canvas.getBoundingClientRect(); return { x: evt.clientX - rect.left, y: evt.clientY - rect.top }; }
このメソッドをイベントに統合し、イベントを提供しますそして引数としてキャンバスを使用します。これは、x および y のマウス位置を詳細に示すオブジェクトを返します。要素自体と揃えるためにキャンバスの位置を減算します。
var canvas = document.getElementById("imgCanvas"); var context = canvas.getContext("2d"); function draw(evt) { var pos = getMousePos(canvas, evt); context.fillStyle = "#000000"; context.fillRect(pos.x, pos.y, 4, 4); }
異なるサイズの要素とビットマップ
CSS のスケーリングやピクセルのアスペクトの違いなどにより、キャンバスとビットマップのサイズが異なる場合比率を変更するには、次のように計算を調整します:
function getMousePos(canvas, evt) { var rect = canvas.getBoundingClientRect(), // abs. size of element scaleX = canvas.width / rect.width, // relationship bitmap vs. element for x scaleY = canvas.height / rect.height; // relationship bitmap vs. element for y return { x: (evt.clientX - rect.left) * scaleX, // scale mouse coordinates after adjusting for element relativity y: (evt.clientY - rect.top) * scaleY // scale mouse coordinates after adjusting for element relativity }; }
コンテキスト変換適用
キャンバス コンテキストが回転やスケーリングなどの変換を受けた場合、これらを考慮して現在の行列の逆行列を計算します。新しいブラウザでは、currentTransform プロパティを介して現在の変換へのアクセスが提供されますが、Firefox では mozCurrentTransformInverted を介して逆行列が提供されます。
カスタム行列計算が必要な場合は、独自のソリューションを実装するか、次で提供されているような既存のライブラリを利用します。カスタム マトリックス ソリューション](https://github.com/bebraw/calcGeometryFromPointOnTransformedCanvas)
要素の相対性を調整してマウス座標に逆行列を作成し、正しいマウス位置に合わせます。
var pos = getMousePos(canvas, e); // get adjusted coordinates as described above var imatrix = matrix.inverse(); // obtain the inverse matrix somehow pos = imatrix.applyToPoint(pos.x, pos.y); // apply inverse matrix to adjusted coordinate context.fillStyle = "#000000"; context.fillRect(pos.x - 1, pos.y - 1, 2, 2);
あるいは、currentTransform の使用が可能な場合は、
var pos = getMousePos(canvas, e); // get adjusted coordinates as described above var matrix = ctx.currentTransform; // W3C (future) var imatrix = matrix.invertSelf(); // invert // apply to point: var x = pos.x * imatrix.a + pos.y * imatrix.c + imatrix.e; var y = pos.x * imatrix.b + pos.y * imatrix.d + imatrix.f;
さらに単純化するために、次のことを考慮します。最後のコード ブロックで説明した無料の MIT ライセンスのライブラリなど、これらすべての手順を処理する包括的なライブラリを利用します。
以上がHTML5 キャンバス上で実際のマウスの位置を取得するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

JavaScriptは、Webページのインタラクティブ性とダイナミズムを向上させるため、現代のWebサイトの中心にあります。 1)ページを更新せずにコンテンツを変更できます。2)Domapiを介してWebページを操作する、3)アニメーションやドラッグアンドドロップなどの複雑なインタラクティブ効果、4)ユーザーエクスペリエンスを改善するためのパフォーマンスとベストプラクティスを最適化します。

CおよびJavaScriptは、WebAssemblyを介して相互運用性を実現します。 1)CコードはWebAssemblyモジュールにコンパイルされ、JavaScript環境に導入され、コンピューティングパワーが強化されます。 2)ゲーム開発では、Cは物理エンジンとグラフィックスレンダリングを処理し、JavaScriptはゲームロジックとユーザーインターフェイスを担当します。

JavaScriptは、Webサイト、モバイルアプリケーション、デスクトップアプリケーション、サーバー側のプログラミングで広く使用されています。 1)Webサイト開発では、JavaScriptはHTMLおよびCSSと一緒にDOMを運用して、JQueryやReactなどのフレームワークをサポートします。 2)ReactNativeおよびIonicを通じて、JavaScriptはクロスプラットフォームモバイルアプリケーションを開発するために使用されます。 3)電子フレームワークにより、JavaScriptはデスクトップアプリケーションを構築できます。 4)node.jsを使用すると、JavaScriptがサーバー側で実行され、高い並行リクエストをサポートします。

Pythonはデータサイエンスと自動化により適していますが、JavaScriptはフロントエンドとフルスタックの開発により適しています。 1. Pythonは、データ処理とモデリングのためにNumpyやPandasなどのライブラリを使用して、データサイエンスと機械学習でうまく機能します。 2。Pythonは、自動化とスクリプトにおいて簡潔で効率的です。 3. JavaScriptはフロントエンド開発に不可欠であり、動的なWebページと単一ページアプリケーションの構築に使用されます。 4. JavaScriptは、node.jsを通じてバックエンド開発において役割を果たし、フルスタック開発をサポートします。

CとCは、主に通訳者とJITコンパイラを実装するために使用されるJavaScriptエンジンで重要な役割を果たします。 1)cは、JavaScriptソースコードを解析し、抽象的な構文ツリーを生成するために使用されます。 2)Cは、Bytecodeの生成と実行を担当します。 3)Cは、JITコンパイラを実装し、実行時にホットスポットコードを最適化およびコンパイルし、JavaScriptの実行効率を大幅に改善します。

現実世界でのJavaScriptのアプリケーションには、フロントエンドとバックエンドの開発が含まれます。 1)DOM操作とイベント処理を含むTODOリストアプリケーションを構築して、フロントエンドアプリケーションを表示します。 2)node.jsを介してRestfulapiを構築し、バックエンドアプリケーションをデモンストレーションします。

Web開発におけるJavaScriptの主な用途には、クライアントの相互作用、フォーム検証、非同期通信が含まれます。 1)DOM操作による動的なコンテンツの更新とユーザーインタラクション。 2)ユーザーエクスペリエンスを改善するためにデータを提出する前に、クライアントの検証が実行されます。 3)サーバーとのリフレッシュレス通信は、AJAXテクノロジーを通じて達成されます。

JavaScriptエンジンが内部的にどのように機能するかを理解することは、開発者にとってより効率的なコードの作成とパフォーマンスのボトルネックと最適化戦略の理解に役立つためです。 1)エンジンのワークフローには、3つの段階が含まれます。解析、コンパイル、実行。 2)実行プロセス中、エンジンはインラインキャッシュや非表示クラスなどの動的最適化を実行します。 3)ベストプラクティスには、グローバル変数の避け、ループの最適化、constとletsの使用、閉鎖の過度の使用の回避が含まれます。


ホットAIツール

Undresser.AI Undress
リアルなヌード写真を作成する AI 搭載アプリ

AI Clothes Remover
写真から衣服を削除するオンライン AI ツール。

Undress AI Tool
脱衣画像を無料で

Clothoff.io
AI衣類リムーバー

Video Face Swap
完全無料の AI 顔交換ツールを使用して、あらゆるビデオの顔を簡単に交換できます。

人気の記事

ホットツール

ドリームウィーバー CS6
ビジュアル Web 開発ツール

WebStorm Mac版
便利なJavaScript開発ツール

ZendStudio 13.5.1 Mac
強力な PHP 統合開発環境

SecLists
SecLists は、セキュリティ テスターの究極の相棒です。これは、セキュリティ評価中に頻繁に使用されるさまざまな種類のリストを 1 か所にまとめたものです。 SecLists は、セキュリティ テスターが必要とする可能性のあるすべてのリストを便利に提供することで、セキュリティ テストをより効率的かつ生産的にするのに役立ちます。リストの種類には、ユーザー名、パスワード、URL、ファジング ペイロード、機密データ パターン、Web シェルなどが含まれます。テスターはこのリポジトリを新しいテスト マシンにプルするだけで、必要なあらゆる種類のリストにアクセスできるようになります。

SublimeText3 Mac版
神レベルのコード編集ソフト(SublimeText3)
