Giter Club home page Giter Club logo

react-swipeable's Introduction

React Swipeable

React swipe and touch event handler component & hook

build status npm version npm downloads gzip size

Edit react-swipeable image carousel with hook

Github Pages Demo

Version 5 released!

React hooks have been released with 16.8.0 ๐ŸŽ‰

v5 of react-swipeable includes a hook, useSwipeable, that provides the same great functionality as <Swipeable>. See the useSwipeable hook in action with this codesandbox.

The component is still included and migration to v5 is straightforward. Please see the migration doc for more details including more info on the simplified api.

Installation

$ npm install react-swipeable

Api

Use React-hooks or a Component and set your swipe(d) handlers.

import { useSwipeable, Swipeable } from 'react-swipeable'

Hook

const handlers = useSwipeable({ onSwiped: (eventData) => eventHandler, ...config })
return (<div {...handlers}> You can swipe here </div>)

Hook use requires react >= 16.8.0.

Component

<Swipeable onSwiped={(eventData) => eventHandler} {...config} >
  You can swipe here!
</Swipeable>

The Component <Swipeable> uses a <div> by default under the hood to attach event handlers to.

Props / Config Options

Event Handler Props

{
  onSwiped,          // Fired after any swipe
  onSwipedLeft,      // Fired after LEFT swipe
  onSwipedRight,     // Fired after RIGHT swipe
  onSwipedUp,        // Fired after UP swipe
  onSwipedDown,      // Fired after DOWN swipe
  onSwiping,         // Fired during any swipe
}

Event data

All Event Handlers are called with the below event data.

{
  event,          // source event
  deltaX,         // x offset (current.x - initial.x)
  deltaY,         // y offset (current.y - initial.y)
  absX,           // absolute deltaX
  absY,           // absolute deltaY
  velocity,       // โˆš(absX^2 + absY^2) / time
  dir,            // direction of swipe (Left|Right|Up|Down)
}

Configuration Props

{
  delta: 10,                             // min distance(px) before a swipe starts
  preventDefaultTouchmoveEvent: false,   // preventDefault on touchmove, *See Details*
  trackTouch: true,                      // track touch input
  trackMouse: false,                     // track mouse input
  rotationAngle: 0,                      // set a rotation angle

  touchHandlerOption: {         // overwrite touch handler 3rd argument
    passive: true|false         // defaults opposite of preventDefaultTouchmoveEvent *See Details*
  },
}

Component Specific Props

{
  nodeName: 'div',      // internal component dom node
  innerRef              // access internal component dom node
}

None of the props/config options are required.

preventDefaultTouchmoveEvent Details

preventDefaultTouchmoveEvent prevents the browser's touchmove event. Use this to stop the browser from scrolling while a user swipes.

  • e.preventDefault() is only called when:
    • preventDefaultTouchmoveEvent: true
    • trackTouch: true
    • the users current swipe has an associated onSwiping or onSwiped handler/prop
  • if preventDefaultTouchmoveEvent: true then touchHandlerOption defaults to { passive: false }
  • if preventDefaultTouchmoveEvent: false then touchHandlerOption defaults to { passive: true }

Example:

  • If a user is swiping right with <Swipable onSwipedRight={this.userSwipedRight} preventDefaultTouchmoveEvent={true} > then e.preventDefault() will be called, but if the user was swiping left then e.preventDefault() would not be called.

Please experiment with the example to test preventDefaultTouchmoveEvent.

Older browser support

If you need to support older browsers that do not have support for {passive: false} addEventListener 3rd argument, we recommend using detect-passive-events package to determine the touchHandlerOption prop value.

Development

Initial set up, with node 10+, run npm install.

Make changes/updates to the src/index.js file.

Please add tests if PR adds/changes functionality.

Verify updates with the examples

Build, run, and test examples locally: npm run start:examples

After the server starts you can then view the examples page with your changes at http://localhost:3000.

You can now make updates/changes to src/index.js and webpack will rebuild, then reload the page so you can test your changes!

License

MIT

react-swipeable's People

Contributors

anicke avatar cap32 avatar dentrado avatar elliotschi avatar epzilla avatar goatslacker avatar grantila avatar hartzis avatar kl0tl avatar larskumbier avatar lochstar avatar marcel-g avatar moox avatar moret avatar phibo23 avatar rdy avatar sennett avatar

Watchers

 avatar  avatar

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    ๐Ÿ–– Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. ๐Ÿ“Š๐Ÿ“ˆ๐ŸŽ‰

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google โค๏ธ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.