New Research: Supply Chain Attack on Axios Pulls Malicious Dependency from npm.Details →
Socket
Book a DemoSign in
Socket

react-anim

Package Overview
Dependencies
Maintainers
1
Versions
4
Alerts
File Explorer

Advanced tools

Socket logo

Install Socket

Detect and block malicious and high-risk dependencies

Install

react-anim

React Animation Library for the Web

latest
Source
npmnpm
Version
0.2.1
Version published
Weekly downloads
4
Maintainers
1
Weekly downloads
 
Created
Source

React Animation

A simple component specific animation library for react.

Concept

  • Make the component Animatable. Wrap around your existing component.
  • Create component with properties/style with ReactAnimation.Value instance
  • Create Animation object on ReactAnimation.Value with configurations - final value and duration.
  • Start the Animation

Example

  • First create an animatable component

image.js

import React from 'react';
import ReactAnimation, {makeAnimatable} from 'react-animation';

/* Make a normal React Component Animatable */
const AnimatableImage = makeAnimatable(function(props) {
  const {x, y, href, ...other} = props;
  return <img src={href} {...other} style={{position: 'absolute', left:x-50, top: y-50}}/>
});

/* Use the animatable component with ReactAnimation.Value(s) */
class Image extends React.Component {
  constructor(props) {
    super(props);
    this.state = {
      x: new ReactAnimation.Value(props.x),
      y: new ReactAnimation.Value(props.y)
    }
    this._anim = null;
  }

  componentWillReceiveProps(nextProps) {
    if (nextProps.x != this.props.x || nextProps.y != this.props.y) {
      // Stop any previously running animation
      this._anim && this._anim.finish();

      // Create a new animation
      this._anim = ReactAnimation.timed([this.state.x, this.state.y], {
        toValue: [nextProps.x, nextProps.y],
        duration: 100
      });

      // Run the Animation
      this._anim.start();
    }
  }

  render() {
    const { x, y } = this.state;
    return(
      <AnimatableImage {...this.props} x={x} y={y} />
    )
  }
}

export default Image;


  • The Application

demo.js

/*
 * A simple demo that draws the image on the page and whenever the
 * moves, the logo moves with a timed Animation
 */
import React from 'react';
import { render, findDOMNode } from 'react-dom';
import Image from './image';

const logo = require("./logo.png");

class App extends React.Component {
  constructor(props) {
    super(props);

    this.state = {
      imgX: 0,
      imgY: 0
    }
  }

  componentDidMount() {
    const node = findDOMNode(this);
    this.setState({
      imgX: node.clientWidth/2,
      imgY: node.clientHeight/2
    });
  }

  render() {
    return (
      <div style={{ position: 'absolute', left: 0, top: 0, right: 0, bottom: 0 }}
            onMouseMove={ this.relocate.bind(this) }>
        <Image x={this.state.imgX} y={this.state.imgY} width="100px" href={logo} />
      </div>
    );
  }

  relocate(evt) {
    console.log("Relocate to ", evt.clientX, evt.clientY);
    this.setState({
      imgX: evt.clientX,
      imgY: evt.clientY
    });
  }

}

render(<App />, document.getElementById("stage"));

TODO

Checkout https://github.com/chenglou/react-motion/blob/master/src/stepper.js to implement Spring Animation for more realistic animations.

FAQs

Package last updated on 11 Apr 2016

Did you know?

Socket

Socket for GitHub automatically highlights issues in each pull request and monitors the health of all your open source dependencies. Discover the contents of your packages and block harmful activity before you install or update your dependencies.

Install

Related posts