


Javascript implementiert einen kreisförmigen Radiergummi für die Leinwand
In der Frontend-Entwicklung ist Canvas eine sehr wichtige Technologie. Es ermöglicht uns, verschiedene Grafiken zu zeichnen und einige sehr coole Effekte zu erzielen. In vielen Fällen müssen wir eine Radiergummifunktion implementieren, damit Benutzer einige Elemente auf der Leinwand, wie Graffiti, Bilder usw., löschen können. In diesem Artikel wird erläutert, wie Sie mithilfe von Javascript einen kreisförmigen Radiergummi für die Leinwand implementieren.
Zuerst müssen wir ein Canvas-Element erstellen und seinen Kontext abrufen:
<html> <body> <canvas id="myCanvas" width="500" height="500"></canvas> </body> </html> <script> const canvas = document.getElementById("myCanvas"); const ctx = canvas.getContext("2d"); </script>
Als nächstes müssen wir auf die Mausereignisse des Canvas hören, damit sich der Benutzer bewegen kann Mit der Maus können Sie Elemente auf der Leinwand löschen. Wir können den folgenden Code verwenden, um Folgendes zu erreichen:
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(); } });
Code-Erklärung:
- Wir erstellen zunächst eine Variable
isErasing
für Identifiziert, ob die Benutzer löscht.isErasing
,用于标识用户是否正在擦除。 - 然后,我们监听了canvas的
mousedown
事件和mouseup
事件,用于在用户按下和松开鼠标时改变isErasing
的值。 - 最后,我们监听了canvas的
mousemove
事件,当isErasing
为true
时,我们获取鼠标的坐标和半径,使用ctx.arc()
方法绘制圆形,并使用ctx.globalCompositeOperation = "destination-out"
将其与canvas上的元素进行混合,实现橡皮擦的效果。
这里需要注意的是,我们使用的是globalCompositeOperation
属性的destination-out
值,它表示只有当前绘制的图形与canvas上已有的图形重叠的部分会被擦除。
好了,现在我们已经实现了canvas圆形橡皮擦的功能。为了让用户更好地使用橡皮擦,我们还可以增加一些交互效果,比如显示当前擦除半径、变换擦除颜色等。完整的代码实现如下:
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>
元素,在canvas之外创建了一个橡皮擦大小调节器和颜色选择器,用于动态调整橡皮擦的大小和颜色。 - 当用户移动鼠标时,我们通过
document.getElementById()
获取到橡皮擦的DOM元素,并根据当前鼠标的位置设置它的left
和top
Dann haben wir uns das - Abschließend hören wir uns das
mousemove
-Ereignis der Leinwand an. WennisErasing
true
ist, erhalten wir die Koordinaten des Verwenden Sie die Methodectx.arc()
, um einen Kreis zu zeichnen, und verwenden Siectx.globalCompositeOperation = "destination-out"
, um ihn mit Elementen auf dem zu mischen Leinwand, um den Radiergummi-Effekt zu erzielen.
mousedown
-Ereignis und das mouseup
-Ereignis der Leinwand angehört, die verwendet werden, um zu ändern, wenn der Benutzer drückt und loslässt Maus. Der Wert von isErasing
. destination-out
-Wert des globalCompositeOperation
-Attributs verwenden, was bedeutet, dass nur die Aktuell gezeichnet Die Teile der Grafik, die vorhandene Grafiken auf der Leinwand überlappen, werden gelöscht. Okay, jetzt haben wir die runde Radiergummifunktion der Leinwand implementiert. Damit Benutzer den Radierer besser nutzen können, können wir auch einige interaktive Effekte hinzufügen, z. B. die Anzeige des aktuellen Radierradius, das Ändern der Radierfarbe usw. Die vollständige Code-Implementierung lautet wie folgt: rrreee
Code-Erklärung: #🎜🎜##🎜🎜##🎜🎜# Wir haben auch eineeraserRadius
-Variable hinzugefügt, um den aktuellen Löschvorgang zu speichern Zusätzlich zum Radius gibt es auch eine Variable eraserColor
, die die aktuelle Löschfarbe enthält. #🎜🎜##🎜🎜# Wir verwenden das <input>
-Element und das <div>
-Element in HTML, um eine Radiergummigrößenanpassung außerhalb der Leinwand zu erstellen Farbwähler zum dynamischen Anpassen der Größe und Farbe des Radierers. #🎜🎜##🎜🎜#Wenn der Benutzer die Maus bewegt, erhalten wir das DOM-Element des Radierers über document.getElementById()
und setzen seinen left- und <code>top
-Attribute. Auf diese Weise kann der Benutzer sehen, wie groß der aktuelle Löschradius ist. #🎜🎜##🎜🎜# Wir blenden den Radierer aus, wenn der Benutzer die Leinwand verlässt. #🎜🎜##🎜🎜#Schließlich legen wir die Radiergummigröße dynamisch fest, wenn die Seite geladen wird. #🎜🎜##🎜🎜##🎜🎜#Zusammenfassung: #🎜🎜##🎜🎜# Durch die Verwendung von Canvas und Javascript können wir ganz einfach einen anpassbaren Radiergummi implementieren. Mit diesem Radiergummi können verschiedene Graffiti, Bilder und andere Elemente gelöscht werden, wodurch das interaktive Erlebnis des Benutzers verbessert wird. In konkreten Projekten können wir maßgeschneiderte Entwicklungen entsprechend spezifischer Anforderungen durchführen, um verfeinerte Effekte zu erzielen. #🎜🎜#Das obige ist der detaillierte Inhalt vonJavascript implementiert einen kreisförmigen Radiergummi für die Leinwand. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Heiße KI -Werkzeuge

Undresser.AI Undress
KI-gestützte App zum Erstellen realistischer Aktfotos

AI Clothes Remover
Online-KI-Tool zum Entfernen von Kleidung aus Fotos.

Undress AI Tool
Ausziehbilder kostenlos

Clothoff.io
KI-Kleiderentferner

AI Hentai Generator
Erstellen Sie kostenlos Ai Hentai.

Heißer Artikel

Heiße Werkzeuge

Notepad++7.3.1
Einfach zu bedienender und kostenloser Code-Editor

SublimeText3 chinesische Version
Chinesische Version, sehr einfach zu bedienen

Senden Sie Studio 13.0.1
Leistungsstarke integrierte PHP-Entwicklungsumgebung

Dreamweaver CS6
Visuelle Webentwicklungstools

SublimeText3 Mac-Version
Codebearbeitungssoftware auf Gottesniveau (SublimeText3)

Heiße Themen



In dem Artikel wird die Verwendung von UseEffect in React, einen Haken für die Verwaltung von Nebenwirkungen wie Datenabrufen und DOM -Manipulation in funktionellen Komponenten erläutert. Es erklärt die Verwendung, gemeinsame Nebenwirkungen und Reinigung, um Probleme wie Speicherlecks zu verhindern.

Der Artikel erläutert den Usecontext in React, was das staatliche Management durch Vermeidung von Prop -Bohrungen vereinfacht. Es wird von Vorteilen wie zentraler Staat und Leistungsverbesserungen durch reduzierte Neulehre erörtert.

In Artikel werden die Verbindungskomponenten an Redux Store mit Connect () verbinden, wobei MapStatetoprops, MapDispatchtoprops und Leistungsauswirkungen erläutert werden.

In Artikeln werden das Standardverhalten bei Ereignishandlern mithilfe von PURDDEFAULT () -Methoden, seinen Vorteilen wie verbesserten Benutzererfahrungen und potenziellen Problemen wie Barrierefreiheitsproblemen verhindern.

Der Artikel erörtert die Vor- und Nachteile kontrollierter und unkontrollierter Komponenten bei React, wobei sich auf Aspekte wie Vorhersehbarkeit, Leistung und Anwendungsfälle konzentriert. Es rät zu Faktoren, die bei der Auswahl zwischen ihnen berücksichtigt werden müssen.

React kombiniert JSX und HTML, um die Benutzererfahrung zu verbessern. 1) JSX bettet HTML ein, um die Entwicklung intuitiver zu gestalten. 2) Der virtuelle DOM -Mechanismus optimiert die Leistung und reduziert den DOM -Betrieb. 3) Komponentenbasierte Verwaltungs-Benutzeroberfläche zur Verbesserung der Wartbarkeit. 4) Staatsmanagement und Ereignisverarbeitung verbessern die Interaktivität.

Das Reaktivitätssystem von VUE 2 kämpft mit der Einstellung der Direktarray -Index, der Längenänderung und der Addition/Löschung der Objekteigenschaften. Entwickler können die Mutationsmethoden von VUE und VUE.SET () verwenden, um die Reaktivität sicherzustellen.

In dem Artikel wird das Definieren von Routen im React -Router unter Verwendung der & lt; Route & gt; Komponente, Abdeckung von Requisiten wie Pfad, Komponente, Rendern, Kindern, exakt und verschachteltes Routing.
