Text wrapping for type animations.
JavaScript HTML
Switch branches/tags
Nothing to show
Clone or download
Fetching latest commit…
Cannot retrieve the latest commit at this time.
Permalink
Failed to load latest commit information.
src
test
.gitignore
.npmignore
.travis.yml
README.md
package-lock.json
package.json
rollup.config.js

README.md

text-split

text-split on Travis text-split on NPM text-split Downloads on NPM Standard JavaScript Style

Text wrapping for type animations.

Install

$ npm install text-split --save

Why?

To address some prior art:

  • Lettering.js - dependent on jQuery
  • charming
    • less straightforward (child nodes are recursed through for text content)
    • less flexible (mandatory class and aria attributes are added, no per piece callback)

With only 1 method and 4 options, text-split offers the most control via the smallest API surface area.

Getting Started

import splitter from 'text-split'

// a target node is required
const target = document.querySelector('.heading')

// pass in the target node
// get back the newly created nodes wrapping the target text (in an array)
const created = splitter(target)

Read more about options below to handle more complex use cases.

Options

All options have defaults, as shown here:

const defaults = {
  a11y = true,
  delimeter = 'letter',
  each = null,
  element = 'span'
}

Each option is explained in further detail below:

a11y

Enable (default) or disable setting of aria attributes on parent and created child nodes.

splitter(target, { a11y: false })

delimeter

Either letter (default) or word, indicating how to break up the target text before wrapping it.

splitter(target, { delimeter: 'word' })

each

A function that, if it exists, is called and passed:

  • the created node, with appropriate textContent
  • the 0-based node index (relative to the other created nodes)
  • the DocumentFragment that stores the nodes created (thus far)

This is the fun part escape hatch.

splitter(target, {
  each: (node, index, frag) => {
    // add a class based on the index
    node.classList.add(`number-${index}`)

    // add a transition delay based on the index
    node.style.transitionDelay = `${index * .05}s`
  }
})

element

A tag name that is used to create the wrapper element for each piece of the text after it is split using the delimeter.

const divs = splitter(target, { element: 'div' })

License

MIT. © 2018 Michael Cavalea