In front-end development, canvas is a very important technology. It allows us to draw various graphics and achieve some very cool effects. In many cases, we need to implement an eraser function so that users can erase some elements on the canvas, such as graffiti, pictures, etc. This article will introduce how to use javascript to implement a canvas circular eraser.
First, we need to create a canvas element and get its context:
<html> <body> <canvas id="myCanvas" width="500" height="500"></canvas> </body> </html> <script> const canvas = document.getElementById("myCanvas"); const ctx = canvas.getContext("2d"); </script>
Next, we need to listen to the mouse event of the canvas so that the user can erase the canvas by moving the mouse elements on. We can use the following code to achieve:
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 explanation:
- We first create a variable
isErasing
to identify whether the user is erasing . - Then, we listened to the canvas's
mousedown
event andmouseup
event, which are used to changeisErasing
when the user presses and releases the mouse. value. - Finally, we listened to the
mousemove
event of canvas. WhenisErasing
istrue
, we get the coordinates and radius of the mouse, usingctx.arc()
method draws a circle and usesctx.globalCompositeOperation = "destination-out"
to mix it with elements on the canvas to achieve the effect of an eraser.
It should be noted here that we are using the destination-out
value of the globalCompositeOperation
attribute, which means that only the currently drawn graphic is the same as the one already drawn on the canvas. Overlapping parts of some graphics will be erased.
Okay, now we have implemented the canvas round eraser function. In order to allow users to use the eraser better, we can also add some interactive effects, such as displaying the current erasing radius, changing the erasing color, etc. The complete code implementation is as follows:
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`;
Code explanation:
- We also added a
eraserRadius
variable to save the current erasure radius, and aeraserColor
Variable, used to save the current erasure color. - We used the
<input>
element and the<div> element in HTML to create an eraser sizer and color selection outside of the canvas Converter for dynamically adjusting the size and color of the eraser. <li>When the user moves the mouse, we get the DOM element of the eraser through <code>document.getElementById()
, and set itsleft
andtop
Properties. This way, the user can see what the current erasing radius is. - We hide the eraser when the user moves out of the canvas.
- Finally, we dynamically set the eraser size when the page loads.
Summary:
By using canvas and javascript, we can easily implement a customizable circular eraser. This eraser can be used to erase various graffiti, pictures and other elements, improving the user's interactive experience. In actual projects, we can carry out customized development according to specific needs to achieve more refined effects.
The above is the detailed content of Javascript implements canvas circular eraser. For more information, please follow other related articles on the PHP Chinese website!

Using ID selectors is not inherently bad in CSS, but should be used with caution. 1) ID selector is suitable for unique elements or JavaScript hooks. 2) For general styles, class selectors should be used as they are more flexible and maintainable. By balancing the use of ID and class, a more robust and efficient CSS architecture can be implemented.

HTML5'sgoalsin2024focusonrefinementandoptimization,notnewfeatures.1)Enhanceperformanceandefficiencythroughoptimizedrendering.2)Improveaccessibilitywithrefinedattributesandelements.3)Addresssecurityconcerns,particularlyXSS,withwiderCSPadoption.4)Ensur

HTML5aimedtoimprovewebdevelopmentinfourkeyareas:1)Multimediasupport,2)Semanticstructure,3)Formcapabilities,and4)Offlineandstorageoptions.1)HTML5introducedandelements,simplifyingmediaembeddingandenhancinguserexperience.2)Newsemanticelementslikeandimpr

IDsshouldbeusedforJavaScripthooks,whileclassesarebetterforstyling.1)Useclassesforstylingtoallowforeasierreuseandavoidspecificityissues.2)UseIDsforJavaScripthookstouniquelyidentifyelements.3)Avoiddeepnestingtokeepselectorssimpleandimproveperformance.4

Classselectorsareversatileandreusable,whileidselectorsareuniqueandspecific.1)Useclassselectors(denotedby.)forstylingmultipleelementswithsharedcharacteristics.2)Useidselectors(denotedby#)forstylinguniqueelementsonapage.Classselectorsoffermoreflexibili

IDsareuniqueidentifiersforsingleelements,whileclassesstylemultipleelements.1)UseIDsforuniqueelementsandJavaScripthooks.2)Useclassesforreusable,flexiblestylingacrossmultipleelements.

Using a class-only selector can improve code reusability and maintainability, but requires managing class names and priorities. 1. Improve reusability and flexibility, 2. Combining multiple classes to create complex styles, 3. It may lead to lengthy class names and priorities, 4. The performance impact is small, 5. Follow best practices such as concise naming and usage conventions.

ID and class selectors are used in CSS for unique and multi-element style settings respectively. 1. The ID selector (#) is suitable for a single element, such as a specific navigation menu. 2.Class selector (.) is used for multiple elements, such as unified button style. IDs should be used with caution, avoid excessive specificity, and prioritize class for improved style reusability and flexibility.


Hot AI Tools

Undresser.AI Undress
AI-powered app for creating realistic nude photos

AI Clothes Remover
Online AI tool for removing clothes from photos.

Undress AI Tool
Undress images for free

Clothoff.io
AI clothes remover

Video Face Swap
Swap faces in any video effortlessly with our completely free AI face swap tool!

Hot Article

Hot Tools

Atom editor mac version download
The most popular open source editor

WebStorm Mac version
Useful JavaScript development tools

MinGW - Minimalist GNU for Windows
This project is in the process of being migrated to osdn.net/projects/mingw, you can continue to follow us there. MinGW: A native Windows port of the GNU Compiler Collection (GCC), freely distributable import libraries and header files for building native Windows applications; includes extensions to the MSVC runtime to support C99 functionality. All MinGW software can run on 64-bit Windows platforms.

SAP NetWeaver Server Adapter for Eclipse
Integrate Eclipse with SAP NetWeaver application server.

VSCode Windows 64-bit Download
A free and powerful IDE editor launched by Microsoft
