An open API service indexing awesome lists of open source software.

https://github.com/ganderzz/react-scroll-to

Scroll to a position in React
https://github.com/ganderzz/react-scroll-to

javascript react scrolling smooth-scrolling

Last synced: 3 months ago
JSON representation

Scroll to a position in React

Awesome Lists containing this project

README

          


👟 React Scroll-To

[![CircleCI](https://circleci.com/gh/ganderzz/react-scroll-to/tree/master.svg?style=svg)](https://circleci.com/gh/ganderzz/react-scroll-to/tree/master)
[![Coverage Status](https://coveralls.io/repos/github/ganderzz/react-scroll-to/badge.svg?branch=feature%2Fcreate-circi-artifact)](https://coveralls.io/github/ganderzz/react-scroll-to?branch=feature%2Fcreate-circi-artifact)
[![All Contributors](https://img.shields.io/badge/all_contributors-5-orange.svg?style=flat-square)](#contributors-)
[![PRs Welcome](https://img.shields.io/badge/PRs-welcome-brightgreen.svg?style=flat-square)](http://makeapullrequest.com)

A React component that makes scrolling easy.

React Scroll-To provides a Higher Order Component, and Render Props implementation.

**Example:** [View React Storybook Examples](https://ganderzz.github.io/react-scroll-to/)

### Install

**npm:** `npm i react-scroll-to --save`

**yarn:** `yarn add react-scroll-to`

### API

**Render Props:**

```jsx
// Scroll to position (20, 500) in the browser window
import React, { Component } from "react";
import { ScrollTo } from "react-scroll-to";

export default class MyComponent extends Component {
render() {
return (

{({ scroll }) => (
scroll({ x: 20, y: 500 })}>Scroll to Bottom
)}

);
}
}
```

```jsx
// Scroll to position (0, 500) within all provided children
import React, { Component } from "react";
import { ScrollTo, ScrollArea } from "react-scroll-to";

export default class MyComponent extends Component {
render() {
return (

{({ scroll }) => (

scroll({ y: 500, smooth: true })}>
Scroll within this container


)}

);
}
}
```

```jsx
// Scroll to position (0, 500) within a specific child
import React, { Component } from "react";
import { ScrollTo, ScrollArea } from "react-scroll-to";

export default class MyComponent extends Component {
render() {
return (

{({ scroll }) => (



scroll({ id: "foo", y: 500 })}>
Scroll within this container


This container won't scroll


)}

);
}
}
```

```jsx
// Scroll by a component's ref
import React, { Component } from "react";
import { ScrollTo } from "react-scroll-to";

export default class MyComponent extends Component {
myRef = React.createRef();

render() {
return (
<>

{({ scroll }) => (
scroll({ ref: this.myRef, x: 20, y: 500 })}>
Scroll to Bottom

)}

My Element

>
);
}
}
```

**Higher Order Component:**

```jsx
// Scroll to position (0, 500) within the browser window
import React from "react";
import { ScrollToHOC } from "react-scroll-to";

export default ScrollToHOC(function(props) {
return props.scroll({ y: 500 })}>Scroll to Bottom;
});
```

```jsx
// Scroll to position (0, 500) within all provided children
import React from "react";
import { ScrollToHOC, ScrollArea } from "react-scroll-to";

export default ScrollToHOC(function(props) {
return (

props.scroll({ y: 500 })}>Scroll to Bottom

);
});
```

```jsx
// Scroll to position (0, 500) within a specific child
import React from "react";
import { ScrollToHOC, ScrollArea } from "react-scroll-to";

export default ScrollToHOC(function(props) {
return (



props.scroll({ id: "foo", y: 500 })}>
Scroll to Bottom


This container won't scroll


);
});
```

### Types:

- **Typescript** definitions are built in
- **Flow** is currently not support (Open for PRs!)

### 2.0 Changes

- v2.0 has a new API for controlling scrolling. Instead of taking two arguments, x and y, the ScrollTo component now takes an object.

```js
scrollTo({
x: 25 // The horizontal x position to scroll to
y: 10 // The vertical y position to scroll to
id: "myId" // The ID of the ScrollArea we want to scroll
ref: refObj // A reference to a component to scroll
smooth: true // If true, this will animate the scroll to be smooth. False will give an instant scroll. (defaults: false)
})
```

Mixing and matching these options give different results.

- The `scrollById` function has been deprecated in favor of the `id` field in `scrollTo`

### Smooth Scrolling Not Working?

Some browsers don't natively support smooth scroll. Checkout adding a polyfill like `smoothscroll-polyfill` to fix the issue.

`npm install smoothscroll-polyfill`

## Contributors

Thanks goes to these wonderful people ([emoji key](https://github.com/kentcdodds/all-contributors#emoji-key)):


Dylan Paulus
Dylan Paulus

💻 📖
Anthony Ng
Anthony Ng

💻 📖
UmenR
UmenR

💻
Yi Wen
Yi Wen

💻
Shitanshu Pandey
Shitanshu Pandey

💻

This project follows the [all-contributors](https://github.com/kentcdodds/all-contributors) specification. Contributions of any kind welcome!