↩ Index

Interaction Design · Prototype · 2025

Wipe It - A gesture-based approach to clearing text fields

A scrub gesture that makes erasing feel as natural as crossing something out on paper.

Overview

Wipe It started from a simple frustration: deleting text on mobile is graceless. You hunt for a tiny x, hold down Delete and watch characters crawl away, or triple-tap and hope your selection lands right.

Every other fundamental gesture has a real-world equivalent. Swipe to delete. Pinch to zoom. Pull to refresh. Erasing text has none.

The best interactions mimic real-world gestures. Erasing text has no equivalent - Wipe It is an attempt to give it one.

The Problem

Have you ever had to delete a large body of text on mobile? Hunt for a tiny x icon buried in a corner? Hold down Delete while watching characters disappear one by one?

The problem is not that it is slow - it is that it feels like nothing. The action has no physical weight, no texture, no sense of working against something.

Wipe It is an attempt to give text deletion a gesture that maps to something your hands already know: erasing. No holding Delete. No precision targeting.

Interaction Model

Drag across a focused text field to erase. A brush stroke follows your finger. When you have covered enough ground - it clears.

The threshold scales with text length. Short text clears in one swipe. A paragraph needs sustained scrubbing.

The formula: threshold = clamp(text.length × 8px, min: 70px, max: 900px)

"John" clears in ~80px. A full paragraph needs ~900px - multiple strokes. The effort is proportional to what is being erased.


Building the Stroke

The brush went through several passes. Each iteration was about removing, not adding - stripping back effects until what remained was a stroke that felt like erasure.

What was triedWhat shipped
Multi-layer gritty charcoal - noise, blur, scatterSingle clean stroke - quadratic curves through midpoints
Dashed line gaps - simulated textureRound caps and joins
Blurred lower edge - fake featheringWarm light grey - rgba(210,210,210,0.85)
Radial gradient dabs - realistic smudgeWidth shrink on release - not a fade
The stroke should be felt, not noticed.

Feedback System

The gesture has no progress bar. The feedback IS the progress indicator - haptics and audio tell you how close you are without any visible UI overlay.

Haptics

A 3ms buzz fires on a repeating timer while the finger moves. The interval compresses as progress builds: interval = 90ms - (progress × 45ms). Slow and textured at the start. Faster and more urgent near the end.

Audio

All sounds are synthesized - short sine and triangle bursts, fast attack, exponential decay. A soft low pop on scrub start, a snappy double-hit on clear, a muted thud for a missed erase. Restore has no sound. Silence communicates undo better than any tone could.


Edge Cases

Five edge cases were defined and handled explicitly - each one a place where a careless implementation would break trust with the user.


Prototype

The prototype is fully functional - built in HTML, JS, and Web APIs. Try it below. Focus the field first, then drag across it to erase.

Live prototype - try it
Focus field · then slide to erase
Cleared
Try live on mobile

This interaction is best experienced on a phone. Touch input and haptic feedback are central to how it works - most of that is lost on a laptop. Scan to open on your device.


Reflection

The most important decisions were all subtractive. Every time something was added - grit texture, blur effects, a stopwatch - it was later removed because it competed with the gesture rather than served it.

Good interaction design disappears. You feel it without noticing it.
What workedWhat is next
Threshold scaling - made it feel intelligentWord-level erasure - erase only what you scrub over
Continuous haptic rumble - analog, not event-drivenVelocity-weighted threshold - fast scrubs feel lighter
Text stays visible during wipe - opacity unchangedAccessibility mode - long-press to clear
Width-shrink exit - more physical than a fade
Restore silence - right call every time
HTML Canvas Pointer Events Haptic API Web Audio API Interaction Prototyping iOS · Android