dactylo
Typewriter effect in JS using CSS.
Dactylo v0.3.0
By Rémino Rem
https://remino.net/
Docs | Code Repo | npm Package
Installation
npm install dactyloUsage
Apply the effect automatically:
import 'dactylo/auto'Or call it yourself:
import { dactylo } from 'dactylo'
dactylo(document.body)Or configure the groups yourself:
dactylo({
root: document.querySelector('main'),
caret: '_',
prompt: '>',
startDelay: 600,
groups: [
{
sels: 'h1, h2',
duration: 600,
},
{
sels: 'p, li',
interval: 18,
parallel: true,
},
],
})Options
caret: character shown after the typed output. Default:_.prompt: character shown before typing starts. Default:>.root: parent node to search. Default:document.body.showFinalCaret: keep the caret visible after the final typed character. Default:false.startDelay: milliseconds to show the prompt before typing starts. Default:600.groups: selector groups to type. By default, headings run first in parallel, then body text runs in parallel, then links and controls run in parallel.
Each group accepts:
sels: selector string or array of selector strings.notIn: parent selectors to exclude.duration: total milliseconds for each element in the group. Default:500.interval: milliseconds per character. Overridesdurationwhen set.parallel: type all matching elements at once instead of in series.
Add data-dactylo-skip to any element that should not be processed.
API
const controller = dactylo(document.body)
controller.state
controller.pause()
controller.play()
controller.playPause()
controller.end()
controller.stop()
controller.reset()
await controller.finishedThe finished promise resolves after all groups complete. The pause() and play() methods control an active run, while playPause() toggles between them. The state property is playing, paused, stopped, or ended. The end() method skips to the completed state. The reset() method cancels the run and returns controlled elements to their starting state with no typed text visible. The stop() method pauses first, then resets. Calling play() after reset() or stop() starts the same target again.
Dactylo dispatches bubbling custom events on document.documentElement: dactylo:start, dactylo:play, dactylo:pause, dactylo:reset, dactylo:stop, and dactylo:end. Each event includes the controller and current state in event.detail.
Development
npm install
npm run dev
npm run buildThe library source lives in src/lib. The documentation site is built with Astro and lives in the rest of src.
Release automation is available through release-it. A release runs checks, builds, publishes the npm package, pushes the release commit and tag, creates a GitHub release, uploads dist/*, then publishes docs:
npm run release:dry-run
npm run releaseIf docs publishing fails after the package release, rerun it directly:
npm run docs:publishBefore running a real release, make sure RELEASE_IT_GITHUB_TOKEN is set and npm whoami --registry https://registry.npmjs.org/ passes. Release-it prompts for an npm OTP when npm requires one.
Contributing
- Fork the repository.
- Create a feature branch:
git checkout -b feature/amazing-feature. - Make your changes.
- Run
npm run build. - Commit, push, and open a pull request.
Issues and ideas are welcome.
Licence
Licensed under the ISC licence. See LICENSE.md.