Javascript はキャンバスの円形消しゴムを実装します
フロントエンド開発において、キャンバスは非常に重要なテクノロジーであり、さまざまなグラフィックを描画したり、非常にクールな効果を実現したりすることができます。多くの場合、ユーザーが落書きや写真など、キャンバス上の一部の要素を消去できるように、消しゴム機能を実装する必要があります。この記事では、JavaScriptを使用してキャンバスの円形消しゴムを実装する方法を紹介します。
まず、キャンバス要素を作成し、そのコンテキストを取得する必要があります。
<html> <body> <canvas id="myCanvas" width="500" height="500"></canvas> </body> </html> <script> const canvas = document.getElementById("myCanvas"); const ctx = canvas.getContext("2d"); </script>
次に、ユーザーが移動してキャンバスを消去できるように、キャンバスのマウス イベントをリッスンする必要があります。マウス要素がオンになります。次のコードを使用すると、これを実現できます。
let isErasing = false; canvas.addEventListener("mousedown", () => { isErasing = true; }); canvas.addEventListener("mouseup", () => { isErasing = false; }); canvas.addEventListener("mousemove", (e) => { if (isErasing) { const x = e.offsetX; const y = e.offsetY; const radius = 20; ctx.beginPath(); ctx.arc(x, y, radius, 0, 2 * Math.PI); ctx.globalCompositeOperation = "destination-out"; ctx.fill(); } });
コードの説明:
- まず、ユーザーが消去しているかどうかを識別する変数
isErasing
を作成します。 - 次に、キャンバスの
mousedown
イベントとmouseup
イベントをリッスンしました。これらは、ユーザーがボタンを押して放したときにisErasing
を変更するために使用されます。マウスの値。 - 最後に、canvas の
mousemove
イベントをリッスンし、isErasing
がtrue
の場合、マウスの座標と半径を取得します。ctx.arc()
メソッドを使用して円を描画し、ctx.globalCompositeOperation = "destination-out"
を使用してそれをキャンバス上の要素と混合し、消しゴムの効果を実現します。
ここでは、globalCompositeOperation
属性の destination-out
値を使用していることに注意してください。これは、現在描画されているグラフィックのみが、キャンバス上に既に描かれているものと同じものになりますが、一部の図形の重なっている部分は消去されます。
さて、これでキャンバスの丸い消しゴム機能が実装されました。ユーザーが消しゴムをより使いやすくするために、現在の消去範囲の表示、消去色の変更などのインタラクティブな効果を追加することもできます。完全なコード実装は次のとおりです。
const canvas = document.getElementById("myCanvas"); const ctx = canvas.getContext("2d"); let isErasing = false; let eraserRadius = 20; let eraserColor = "#ffffff"; canvas.addEventListener("mousedown", () => { isErasing = true; }); canvas.addEventListener("mouseup", () => { isErasing = false; }); canvas.addEventListener("mousemove", (e) => { if (isErasing) { const x = e.offsetX; const y = e.offsetY; ctx.beginPath(); ctx.arc(x, y, eraserRadius, 0, 2 * Math.PI); ctx.globalCompositeOperation = "destination-out"; ctx.fillStyle = eraserColor; ctx.fill(); const eraser = document.getElementById("eraser"); eraser.style.left = `${x - eraserRadius}px`; eraser.style.top = `${y - eraserRadius}px`; eraser.style.display = "block"; } }); canvas.addEventListener("mouseleave", () => { const eraser = document.getElementById("eraser"); eraser.style.display = "none"; }); const eraserRange = document.getElementById("eraserRange"); eraserRange.addEventListener("input", () => { eraserRadius = parseInt(eraserRange.value); const eraser = document.getElementById("eraser"); eraser.style.width = `${eraserRadius * 2}px`; eraser.style.height = `${eraserRadius * 2}px`; }); const eraserColorPicker = document.getElementById("eraserColorPicker"); eraserColorPicker.addEventListener("input", () => { eraserColor = eraserColorPicker.value; }); const eraser = document.getElementById("eraser"); eraser.style.width = `${eraserRadius * 2}px`; eraser.style.height = `${eraserRadius * 2}px`;
コードの説明:
- また、現在の消去半径を保存するための
eraserRadius
変数とeraserColor
変数。現在の消去色を保存するために使用されます。 - HTML の
<input>
要素と<div>
要素を使用して、動的にキャンバス コンバーターの外側に消しゴム サイズ設定と色の選択を作成しました。消しゴムのサイズや色を調整します。 - ユーザーがマウスを動かすと、
document.getElementById()
を通じて消しゴムの DOM 要素を取得し、そのleft
とtop# を設定します。 ##プロパティ。こうすることで、ユーザーは現在の消去範囲を確認できます。
ユーザーがキャンバスの外に移動すると、消しゴムが非表示になります。 - 最後に、ページの読み込み時に消しゴムのサイズを動的に設定します。
以上がJavascript はキャンバスの円形消しゴムを実装しますの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

ホットAIツール

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

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

Undress AI Tool
脱衣画像を無料で

Clothoff.io
AI衣類リムーバー

AI Hentai Generator
AIヘンタイを無料で生成します。

人気の記事

ホットツール

メモ帳++7.3.1
使いやすく無料のコードエディター

SublimeText3 中国語版
中国語版、とても使いやすい

ゼンドスタジオ 13.0.1
強力な PHP 統合開発環境

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

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

ホットトピック









この記事では、functionコンポーネントでのデータフェッチやDOM操作などの副作用を管理するためのフックであるReactの使用Effectについて説明します。メモリリークなどの問題を防ぐための使用、一般的な副作用、およびクリーンアップについて説明します。

この記事では、ReactのUseContextを説明しています。これにより、小道具掘削を避けることで国家管理を簡素化します。再レンダーの削減により、集中状態やパフォーマンスの改善などの利点について説明します。

記事では、Connect()、MapStateToprops、MapDispatchToprops、およびパフォーマンスへの影響を説明するReduxストアに反応コンポーネントをReduxストアに接続します。

記事では、PreventDefault()メソッドを使用して、イベントハンドラーのデフォルト動作の防止、ユーザーエクスペリエンスの強化などの利点、およびアクセシビリティの懸念などの潜在的な問題について説明します。

この記事では、予測可能性、パフォーマンス、ユースケースなどの側面に焦点を当てた、Reactの制御されていないコンポーネントと制御されていないコンポーネントの利点と欠点について説明します。それらを選択する際に考慮することを要因についてアドバイスします。

ReactはJSXとHTMLを組み合わせてユーザーエクスペリエンスを向上させます。 1)JSXはHTMLを埋め込み、開発をより直感的にします。 2)仮想DOMメカニズムは、パフォーマンスを最適化し、DOM操作を削減します。 3)保守性を向上させるコンポーネントベースの管理UI。 4)国家管理とイベント処理は、インタラクティブ性を高めます。

VUE 2の反応性システムは、直接配列インデックス設定、長さの変更、およびオブジェクトプロパティの追加/削除と闘っています。開発者は、Vueの突然変異法とVue.set()を使用して、反応性を確保することができます。

この記事では、&lt; route&gt;を使用して、Reactルーターのルートの定義について説明します。パス、コンポーネント、レンダリング、子供、正確、ネストされたルーティングなどの小道具をカバーするコンポーネント。
