在SVG中实现橡皮擦功能,可以通过以下几个步骤:
以下是一个简单的示例代码:
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title>SVG橡皮擦示例</title>
<style>
svg {
border: 1px solid #ccc;
}
</style>
</head>
<body>
<svg id="svg" width="500" height="500"></svg>
<script>
const svg = document.getElementById('svg');
const eraser = document.createElementNS('http://www.w3.org/2000/svg', 'circle');
eraser.setAttribute('r', '10');
eraser.setAttribute('fill', 'transparent');
eraser.setAttribute('stroke', 'black');
eraser.setAttribute('stroke-width', '20');
eraser.style.pointerEvents = 'none';
svg.appendChild(eraser);
let lastX = 0;
let lastY = 0;
svg.addEventListener('mousedown', (event) => {
lastX = event.clientX;
lastY = event.clientY;
});
svg.addEventListener('mousemove', (event) => {
if (lastX === 0 && lastY === 0) return;
const x = event.clientX;
const y = event.clientY;
const distance = Math.sqrt(Math.pow(x - lastX, 2) + Math.pow(y - lastY, 2));
for (let i = 0; i< distance; i += 10) {
const ratio = i / distance;
const cx = lastX + (x - lastX) * ratio;
const cy = lastY + (y - lastY) * ratio;
const circle = eraser.cloneNode();
circle.setAttribute('cx', cx);
circle.setAttribute('cy', cy);
svg.appendChild(circle);
}
lastX = x;
lastY = y;
});
svg.addEventListener('mouseup', () => {
lastX = 0;
lastY = 0;
});
</script>
</body>
</html>
这个示例中,我们创建了一个SVG元素,并在其中添加了一个橡皮擦元素。我们通过监听鼠标事件,实现了橡皮擦的绘制功能。在绘制过程中,我们根据鼠标的位置计算出橡皮擦的移动路径,并创建一个新的圆形元素来表示橡皮擦的位置和大小。最后,我们将这些圆形元素添加到SVG元素中,从而实现了橡皮擦的效果。
领取专属 10元无门槛券
手把手带您无忧上云