196 lines
6.6 KiB
Markdown
196 lines
6.6 KiB
Markdown
# RELLAX
|
||
|
||
[](https://www.npmjs.org/package/rellax)
|
||
[](https://bundlephobia.com/result?p=rellax)
|
||
[](https://bundlephobia.com/result?p=rellax)
|
||
[](https://twitter.com/dixonandmoe)
|
||
|
||
Rellax is a buttery smooth, super lightweight, vanilla javascript parallax library. **Update:** Rellax now works on mobile (v1.0.0).
|
||
|
||
* [Demo Website](https://dixonandmoe.com/rellax/)
|
||
|
||
Have any suggestions or feedback? Reach out [@dixonandmoe](https://twitter.com/dixonandmoe)
|
||
|
||
## Getting Started
|
||
`npm install rellax --save` or if you're old school like us download and insert `rellax.min.js`
|
||
|
||
```html
|
||
<div class="rellax">
|
||
I’m that default chill speed of "-2"
|
||
</div>
|
||
<div class="rellax" data-rellax-speed="7">
|
||
I’m super fast!!
|
||
</div>
|
||
<div class="rellax" data-rellax-speed="-4">
|
||
I’m extra slow and smooth
|
||
</div>
|
||
|
||
<script src="rellax.min.js"></script>
|
||
<script>
|
||
// Accepts any class name
|
||
var rellax = new Rellax('.rellax');
|
||
</script>
|
||
```
|
||
```html
|
||
<script>
|
||
// Also can pass in optional settings block
|
||
var rellax = new Rellax('.rellax', {
|
||
speed: -2,
|
||
center: false,
|
||
wrapper: null,
|
||
round: true,
|
||
vertical: true,
|
||
horizontal: false
|
||
});
|
||
</script>
|
||
```
|
||
## Features
|
||
|
||
### Speed
|
||
Use the `data-rellax-speed` attribute to set the speed of a `.rellax` element to something other than the default value (which is `-2`). A negative value will make it move slower than regular scrolling, and a positive value will make it move faster. We recommend keeping the speed between `-10` and `10`.
|
||
|
||
#### Responsive Speed
|
||
Use responsive speed attributes for breakpoint levels that require a different speed. Defaults to the `data-rellax-speed` setting in unspecified breakpoints.
|
||
```html
|
||
<div class="rellax" data-rellax-speed="7" data-rellax-xs-speed="-5" data-rellax-mobile-speed="3" data-rellax-tablet-speed="-8" data-rellax-desktop-speed="1">
|
||
I parallax at all different speeds depending on your screen width.
|
||
</div>
|
||
```
|
||
|
||
Pass an array of breakpoints (mobile, tablet and desktop respectively).
|
||
```html
|
||
<script>
|
||
// This is the default setting
|
||
var rellax = new Rellax('.rellax', {
|
||
breakpoints: [576, 768, 1201]
|
||
});
|
||
</script>
|
||
```
|
||
|
||
### Centering
|
||
After some fantastic work from [@p-realinho](https://github.com/p-realinho), we just released the ability to center parallax elements in your viewport! We'll be building a nice demo website, but for now check out the tests folder for several examples of how it works.
|
||
|
||
There's two ways to implement centering, either on specific elements or as a global option.
|
||
```html
|
||
<div class="rellax" data-rellax-percentage="0.5">
|
||
I’m that default chill speed of "-2" and "centered"
|
||
</div>
|
||
<div class="rellax" data-rellax-speed="7" data-rellax-percentage="0.5">
|
||
I’m super fast!! And super centered!!
|
||
</div>
|
||
<div class="rellax" data-rellax-speed="-4" data-rellax-percentage="0.5">
|
||
I’m extra slow and smooth, and hella centered.
|
||
</div>
|
||
```
|
||
```html
|
||
<script>
|
||
// Center all the things!
|
||
var rellax = new Rellax('.rellax', {
|
||
center: true
|
||
});
|
||
</script>
|
||
```
|
||
|
||
### Z-index
|
||
If you want to sort your elements properly in the Z space, you can use the data-rellax-zindex property
|
||
```html
|
||
<div class="rellax">
|
||
I’m that default chill speed of "-2" and default z-index of 0
|
||
</div>
|
||
<div class="rellax" data-rellax-speed="7" data-rellax-zindex="5">
|
||
I’m super fast!! And on top of the previous element, I'm z-index 5!!
|
||
</div>
|
||
```
|
||
|
||
### Horizontal Parallax
|
||
Horizontal parallax is disabled by default. You can enable it by passing `horizontal: true` in the settings block.
|
||
This feature is intended for panoramic style websites, where users scroll horizontally instead of vertically.
|
||
Note that this can work together at the same time with the default vertical parallax. If you do not want this, pass `vertical: false` in the settings block.
|
||
|
||
### Custom Wrapper
|
||
By default, the position of parallax elements is determined via the scroll position of the body. Passing in the `wrapper` property will tell Rellax to watch that element instead.
|
||
```html
|
||
<script>
|
||
// Set wrapper to .custom-element instead of the body
|
||
var rellax = new Rellax('.rellax', {
|
||
wrapper: '.custom-element'
|
||
});
|
||
</script>
|
||
```
|
||
|
||
### Refresh
|
||
```html
|
||
<script>
|
||
// Start Rellax
|
||
var rellax = new Rellax('.rellax');
|
||
|
||
// Destroy and create again parallax with previous settings
|
||
rellax.refresh();
|
||
</script>
|
||
```
|
||
|
||
### Destroy
|
||
```html
|
||
<script>
|
||
// Start Rellax
|
||
var rellax = new Rellax('.rellax');
|
||
|
||
// End Rellax and reset parallax elements to their original positions
|
||
rellax.destroy();
|
||
</script>
|
||
```
|
||
|
||
### Callback
|
||
```html
|
||
<script>
|
||
// Start Rellax
|
||
var rellax = new Rellax('.rellax-blur-card', {
|
||
callback: function(positions) {
|
||
// callback every position change
|
||
console.log(positions);
|
||
}
|
||
});
|
||
</script>
|
||
```
|
||
|
||
### Target node
|
||
Instead of using a className you can use a node, handy when using React and you want to use `refs` instead of `className`.
|
||
```jsx
|
||
<div ref={ref => { this.rellaxRef = ref }}>
|
||
I’m that default chill speed of "-2"
|
||
</div>
|
||
|
||
var rellax = new Rellax(this.rellaxRef)
|
||
```
|
||
|
||
## In the Wild
|
||
If you're using Rellax in production, we'd love to list you here! Let us know: moe@dixonandmoe.com
|
||
- [Microsoft Fluent](https://fluent.microsoft.com/)
|
||
- [Gucci Gift](http://gift.gucci.com/)
|
||
- [Bowmore Scotch](https://www.bowmore.com/)
|
||
- [How Much Does a Website Cost](https://designagency.io/)
|
||
- [Laws of UX](https://lawsofux.com/)
|
||
- [Finch](https://finch.io/)
|
||
- [Product Designer in San Francisco](https://moeamaya.com/)
|
||
- [Cool Backgrounds](https://coolbackgrounds.io/)
|
||
- [EthWorks](http://ethworks.io/)
|
||
- [Unlimited Designs](https://servicelist.io/)
|
||
- [Airgora](https://www.airgora.com/competition)
|
||
- [Lorem Ipsum Generator](https://loremipsumgenerator.com/)
|
||
- [Terry Design](http://terrydesign.co.uk/)
|
||
- [Deeson](https://www.deeson.co.uk/)
|
||
- [Alex Bailon Portfolio](http://www.iambailon.com/)
|
||
|
||
## Development
|
||
In the spirit of lightweight javascript, the build processes (thus far) is lightweight also.
|
||
|
||
1. Open demo.html
|
||
2. Make code changes and refresh browser
|
||
3. Once feature is finished or bug fixed, use [jshint](http://jshint.com/) to lint code
|
||
4. Fix lint issues then use [Google Closure Compiler](https://closure-compiler.appspot.com/home) to minify
|
||
5. 🍻
|
||
|
||
## Changelog
|
||
- 1.7.1: Remove animation on destory [PR](https://github.com/dixonandmoe/rellax/pull/132)
|
||
- 1.7.0: Scroll position set relative to the wrapper [PR](https://github.com/dixonandmoe/rellax/pull/125)
|