npm package discovery and stats viewer.

Discover Tips

  • General search

    [free text search, go nuts!]

  • Package details

    pkg:[package-name]

  • User packages

    @[username]

Sponsor

Optimize Toolset

I’ve always been into building performant and accessible sites, but lately I’ve been taking it extremely seriously. So much so that I’ve been building a tool to help me optimize and monitor the sites that I build to make sure that I’m making an attempt to offer the best experience to those who visit them. If you’re into performant, accessible and SEO friendly sites, you might like it too! You can check it out at Optimize Toolset.

About

Hi, 👋, I’m Ryan Hefner  and I built this site for me, and you! The goal of this site was to provide an easy way for me to check the stats on my npm packages, both for prioritizing issues and updates, and to give me a little kick in the pants to keep up on stuff.

As I was building it, I realized that I was actually using the tool to build the tool, and figured I might as well put this out there and hopefully others will find it to be a fast and useful way to search and browse npm packages as I have.

If you’re interested in other things I’m working on, follow me on Twitter or check out the open source projects I’ve been publishing on GitHub.

I am also working on a Twitter bot for this site to tweet the most popular, newest, random packages from npm. Please follow that account now and it will start sending out packages soon–ish.

Open Software & Tools

This site wouldn’t be possible without the immense generosity and tireless efforts from the people who make contributions to the world and share their work via open source initiatives. Thank you 🙏

© 2024 – Pkg Stats / Ryan Hefner

movinwords

v1.5.0

Published

Add animation to your words and sentences.

Downloads

4,341

Readme

movinwords

movinwords

A plugin to animate sentences, words and letters.

License: MIT npm version

Playground

Check out the playground here.

Installation

npm install movinwords

or

yarn add movinwords

Basic Usage

HTML

<!-- Get Movinwords to animate a given sentence -->
<h1 class="my-sentence">I am an animated sentence.</h1>

<!-- Or you can provide the sentence dynamically (see below) -->
<h1 class="my-injected-sentence"></h1>

JS & CSS

With a bundler
import Movinwords from 'movinwords';
import 'movinwords/movinwords.css';

const sentence = new Movinwords({
  el: '.my-sentence'
});

const injectedSentence = new Movinwords({
  el: '.my-injected-sentence',
  sentence: 'Hello world, I am a sentence!'
});
From a CDN
<link rel="stylesheet" href="https://unpkg.com/movinwords/dist/movinwords.css">
<script src="https://unpkg.com/movinwords/dist/movinwords.min.js"></script>

<script>
  (function () {
    const sentence = new Movinwords({
      el: '.my-sentence'
    });

    const injectedSentence = new Movinwords({
      el: '.my-injected-sentence',
      sentence: 'Hello world, I am a sentence!'
    });
  })();
</script>

Instance Options

| Option | Type | Default | Description | | ----------------------- | --------- | ---------------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | | el | string | null | Required: Sentence container element. | sentence | string | '' | Sentence you want to inject dynamically. | duration | number | 1000 | Duration of the animation in milliseconds. | delay | number | 100 | Delay of the animation in milliseconds. | offset | number | 20 | Offset value to use on slide/reveal transitions (See Offset). | reverseTransition | boolean | false | Reverses the transition animation (See Reverse Transition). | reverseOrder | boolean | false | Reverses the word's appearance order (See Reverse Order). | animateLetters | boolean | false | Animates the individual letters of a sentence (See Animate Letters). | autostart | boolean | true | Starts or stop the animation of the words on instance creation (See Autostart). | transition | MwTransition | fadeIn | Name of the css transition to use (See Transitions). | pausableProps | MwCSSProperties[] | ['opacity','transform'] | Name of the css properties to be paused when pause is triggered (See Pause). | wordSpacing | number | null | Space gap between each word. (See Word Spacing) | letterSpacing | number | null | Space gap between each letter. (See Letter Spacing) | highlight | MwHighlightOptions | { classname: 'highlight', tag: 'strong', words: [] } | Object specifying which words should be highlighted and how (See Highlight). | events | MwEventListeners | {} | Object specifying callback functions for firing events (See Events). | eventsTransitionProperty | string | opacity | Name of the transition property to be used to control transition events (See Events and Transitions). | intersectionStart | boolean | false | Starts the animation when the element intersects the viewport (See Viewport Intersection). | intersectionOptions | MwIntersectionObserverProperties | { root: null, threshold: 0, rootMargin: '0px' } | Object specifying the intersection properties (See Viewport Intersection).

Methods

| Method | Description | |--|--| | start | Starts the animation (See Autostart).| | pause | Pauses the animation (See Pause).| | resume | Resumes the animation (See Resume).|

Events

You can register events callbacks to be fired at different points of Movinword's lifecycle.

const mw = new Movinwords({
  el: '.my-sentence',
  events: {
    start: (options) => {
      console.log('Started!', options)
    },
    wordTransitionStart: (options) => {
      console.log('Word Transition Started', options)
    },
    wordTransitionEnd: (options) => {
      console.log('Word Transition Ended', options)
    },
    end: (options) => {
      console.log('Ended!', options)
    }
  }
})

| Event Name | Description | |--|--| | start | Fires on Starts of Movinwords | | end | Fires on End of Movinwords | | wordTransitionStart | Fires when a word transition starts | | wordTransitionEnd | Fires when a word transition ends |

Events and Transitions:

wordTransitionStart and wordTransitionEnd use Javascript's transitionstart and transitionend events under the hood to know when they need to fire. These last two fire for each CSS transition property declared (e.g: If a CSS transition uses opacity and transform, the events will fire twice).

To avoid this issue we have exposed the eventsTransitionProperty property. It expects the CSS transition name you want to use as 'filter' to focus on and exclude all other props:

.mw.slideInBottom .mw-l {
  opacity: 0;
  transition-property: opacity, transform;
const mw = new Movinwords({
  el: '.my-sentence',
  transition: 'slideInBottom',
  events: { [YOUR EVENT CALLBACKS ] },
  eventsTransitionProperty: 'opacity' // Movinwords will focus on the opacity prop and ignore the transform one.
})

Autostart

By default Movinwords will start as soon as you create the instance. But you can override this action and trigger the start action manually by passing autostart: false in the instance options, and using the start() method:

const mw = new Movinwords({
  el: '.my-sentence',
  autostart: false
})

// Triggers start after 2 seconds.
setTimeout(() => {
  mw.start()
}, 2000)

Pause

To pause an animation you can call the pause() method:

const mw = new Movinwords({
  el: '.my-sentence',
  autostart: false
})

// Triggers start.
mw.start()

setTimeout(() => {
  // Triggers a pause after 2 seconds.
  mw.pause()
}, 2000)

Internally Movinwords will pause those css properties provided in pausableProps. By default, all transitions shipped with Movinwords target the opacity and transform css properties.

If you create custom transitions which target other css properties, be sure to provide them through pausableProps.

Resume

To resume (unpause) the animation you need to call the resume() method:

const mw = new Movinwords({
  el: '.my-sentence',
  autostart: false
})

// Triggers start.
mw.start()

setTimeout(() => {
  // Triggers a pause after 2 seconds.
  mw.pause()
}, 2000)

setTimeout(() => {
  // Resumes the animation after 4 seconds.
  mw.resume()
}, 4000)

Transitions

Movinwords ships with these css transitions to use:

| Name | Effect | |--|--| | fadeIn | Words fade in | | slideInTop | Words slide+fade in from top to bottom | | slideInBottom | Words slide+fade in from bottom to top | | slideInLeft | Words slide+fade in from left to right | | slideInRight | Words slide+fade in from right to left | | revealInTop | Words slide+fade in from top to bottom inside a hidden container | | revealInBottom | Words slide+fade in from bottom to top inside a hidden container |

new Movinwords({
  el: '.my-sentence',
  transition: 'slideInLeft' // Words will slide from the left
})

Offset

You can define an offset value to be used with slide and reveal animations. This will tell Movinwords how offsetted the words should be from the baseline anchor point (0px).

new Movinwords({
  el: '.my-sentence',
  transition: 'slideInLeft',
  offset: 50 // Words will be 50px offset from the start (0px) and slide in from left to right
})

Reverse Transition

You can reverse the transition animations. This will tell Movinwords to execute a reversed version of the transition you have defined. Note: this property makes the transition names counterintuitive, as "In" transitions behave like "out" ones.

new Movinwords({
  el: '.my-sentence',
  transition: 'fadeIn',
  reverseTransition: true // Transition "fadeIn" will behave like a "fade out" (from opacity 1, to opacity 0).
})

Reverse Order

You can reverse the order in which the words appear/disappear. This will tell Movinwords to transition the words the opposite order (Last word of the sentence is the first to transition).

<h2 class="my-sentence">Hello lovely world!</h2>
new Movinwords({
  el: '.my-sentence',
  reverseOrder: true // "world!" will appear first, "lovely" second, "Hello" last (From right to left).
})

Word Spacing

By default Movinwords will calculate the space between words based on the sentence's font size, but you can pass a value of your own to override this action:

new Movinwords({
  el: '.my-sentence',
  wordSpacing: 50 // Will set a 50px space between each word.
})

Letter Spacing

You can provide a space between each letter:

new Movinwords({
  el: '.my-sentence',
  letterSpacing: 50 // Will set a 50px space between each letter.
})

Highlight

To highlight words you need to pass a highlight object in the instance options:

<h1 class="my-sentence">Hello world! I am an animated sentence.</h1>
new Movinwords({
  el: '.my-sentence',
  highlight: {
    classname: 'highlight',
    tag: 'strong',
    words: ['world!', 'am']
  }
})

| Options | Type | Default | Description |--|--|--|--| | classname | string | highlight | Classname to append to the highlighted word tags | tag | string | strong | HTML tag we want the word to be wrapped-highlighted in | words | array | [] | Array containing the words that we want to highlight.

Viewport Intersection

You can define if you want to trigger Movinwords only when the element is in the Viewport.

new Movinwords({
  el: '.my-sentence',
  intersectionStart: true // Movinwords will start when the element enters the viewport.
})

Movinwords uses IntersectionObserver behind the scenes. If you wish to modify the intersection properties you can provide intersectionOptions in the options:

new Movinwords({
  el: '.my-sentence',
  intersectionStart: true,
  intersectionOptions: {
    root: null,
    threshold: 0,
    rootMargin: '0px'
  }
})

Animate Letters

By default Movinwords animates the words in a sentence. If you wish to animate each single letter in a word instead you can set animateLetters to true.

<h2 class="my-sentence">Hello lovely world!</h2>
new Movinwords({
  el: '.my-sentence',
  transition: 'slideInBottom',
  animateLetters: true // Each letter will slide in from the bottom
})