1.2.0 • Published 1 year ago

react-stay-in-view v1.2.0

Weekly downloads
-
License
MIT
Repository
github
Last release
1 year ago

react-stay-in-view

Version Badge NPM license PRs Welcome GZipped size Downloads NPM total downloads

A react hook and component to create popper (popover) that never leave the screen. Created elements will not disappear from the screen when scrolling and resizing.

Features

  • 🚀 Fast - Built with hooks and functional components only.
  • 🛠 Written in TypeScript - It'll fit right into your existing TypeScript project.
  • 👫 Cross-browser - Works out-of-the-box for most browsers, regardless of version.
  • 📲 Mobile-friendly - Supports mobile devices and touch screens.
  • 🌳 Tree-shakeable - Only include the parts you use.
  • 🗜 Lightweight - Around ~1.1kB.
  • 💨 No dependencies

Try it live: Try it live

Preview

Install

  # with npm
  npm install --save react-stay-in-view
  # with yarn
  yarn add react-stay-in-view

Usage

useStayInView hook

import { useStayInView } from 'react-stay-in-view';

const StayInView = ({ className, children, anchorEl, placement }) => {
  const { ref } = useStayInView({ anchorEl, placement });

  return (
    <div ref={ref} className={className}>
      {children}
    </div>
  );
};

Props

Output: ref - paste this ref in your component

NameDescriptionTypeRequiredDefault Value
anchorElAn element relative to which the new position will be fixedHTMLElementnull
placementElement position relative to anchorElstringright-start
avoidAnchorOverlapPrevents anchorEl from overlapping when scrolling to screen borderbooleantrue

StayInView component

import { StayInView } from 'react-stay-in-view';

const App = () => {
  const [anchorEl, setAnchorEl] = useState<HTMLElement | null>(null);
  const [isVisible, setIsVisible] = useState<boolean>(false);

  const onClick = (e: React.MouseEvent<HTMLButtonElement>) => {
    setAnchorEl(e.currentTarget);
    setIsVisible((prev) => !prev);
  };

  return (
    <div>
      {isVisible && (
        <StayInView anchorEl={anchorEl}>
          <div>I stay on the screen</div>
        </StayInView>
      )}
      <button onClick={onClick}>Click me!</button>
    </div>
  );
};

Props

NameDescriptionTypeRequiredDefault Value
childrenA children elementReactNode
classNameContainer class name.stringnull
anchorElAn element relative to which the new position will be fixedHTMLElementnull
placementElement position relative to anchorElstringright-start
avoidAnchorOverlapPrevents anchorEl from overlapping when scrolling to screen borderbooleantrue

Contributions

Learn how to contribute

License

MIT © vdmrgv

1.2.0

1 year ago

1.1.10

2 years ago

1.1.9

2 years ago

1.1.8

2 years ago

1.1.7

2 years ago

1.1.6

2 years ago

1.1.5

2 years ago

1.1.4

2 years ago

1.1.3

2 years ago

1.1.2

2 years ago

1.1.1

2 years ago

1.1.0

2 years ago

1.0.7

2 years ago

1.0.6

2 years ago

1.0.5

2 years ago

1.0.4

2 years ago

1.0.3

2 years ago

1.0.2

2 years ago

1.0.1

2 years ago