float-sidebar
Version:
A lightweight (2kb gzipped), zero-dependency javascript library for making a sidebar float
108 lines (78 loc) • 2.81 kB
Markdown
[](https://www.npmjs.org/package/float-sidebar)
> A lightweight (2kb gzipped), zero-dependency javascript library for making a sidebar float.
[Demo](https://jsfiddle.net/vursen/cj4erfnj/41/)
The library is designed on top of the finite state machine pattern, which results in a straightforward solution that is pretty easy to understand and maintain.
More about the approach in [the article on medium](https://medium.com/@vursen/state-machine-for-sticky-blocks-70ca0bf4ee97) (in Russian)
## Install
```bash
npm install float-sidebar --save
```
or
```bash
yarn add float-sidebar
```
or
```html
<script src="./path/to/float-sidebar.min.js"></script>
```
```html
<div class="wrapper">
<div class="content">
<!-- Content -->
</div>
<div class="sidebar">
<div class="sidebar__inner">
<!-- Sidebar content -->
</div>
</div>
</div>
```
```css
.wrapper {
display: flex;
/* Required in case of using an infinite scroll */
align-items: flex-start;
}
.sidebar {
/* Required */
position: relative;
/* Required. The sidebar element should have a fixed width */
width: 220px;
}
```
```javascript
import FloatSidebar from 'float-sidebar';
const sidebar = document.querySelector('.sidebar');
const relative = document.querySelector('.content');
const floatSidebar = FloatSidebar({
sidebar,
relative,
topSpacing: 20,
bottomSpacing: 20
});
// ...
floatSidebar.forceUpdate();
// ...
floatSidebar.destroy();
```
| Name | Type | Default | Description |
|:------------- |:------------- |:--------------------------- | ---------------- |
| sidebar | `HTMLElement` | Required | The sidebar element |
| relative | `HTMLElement` | Required | The sidebar relative element, e.g. the main content |
| viewport | `HTMLElement` | `window` | The viewport element |
| sidebarInner | `HTMLElement` | `sidebar.firstElementChild` | The sidebar inner element |
| topSpacing | `number` | `0` | The space from the top of the viewport. It is used when the sidebar is fixed. |
| bottomSpacing | `number` | `0` | The space from the bottom of the viewport. It is used when the sidebar is fixed. |
| Method | Description |
|:------------- |:------------- |
| forceUpdate() | Recalculates all the dimensions and finally updates the position of the sidebar. |
| destroy() | Disposes the DOM listeners. |
- https://github.com/abouolia/sticky-sidebar
FloatSidebar.js is released under the MIT license.
Author Sergey Vinogradov