Security News
PyPI’s New Archival Feature Closes a Major Security Gap
PyPI now allows maintainers to archive projects, improving security and helping users make informed decisions about their dependencies.
scroller-motion
Advanced tools
To begin you'll want to install scroller-motion as well as the peer dependencies:
npm install scroller-motion framer-motion react
# or
yarn add scroller-motion framer-motion react
Note: Due to the use of hooks the minimum required version of React is 16.8
Implementing scroller-motion couldn't be easier, simply wrap your page with the <ScrollerMotion>
component. For example in a Next.js app this might look like the following:
/* pages/index.jsx */
import { ScrollerMotion } from 'scroller-motion'
export default () => (
<ScrollerMotion>
<MyComponent />
</ScrollerMotion>
)
Most modern browsers implement an inertia bounce effect to the window while scrolling (upon reaching the start/end). This can cause unwanted visual effects, such as flickering, when using scroller-motion.
To fix this, you can disable overscroll-behavior
in your project with the following CSS:
/* style.css */
html,
body {
overscroll-behavior: none;
}
All props are optional.
disabled
Type | boolean |
Default | false |
Description | Completly disables and unmounts the ScrollerMotion component. Any children will be rendered through a React <Fragment> in this case (thus falling back to native scrolling). |
scale
Type | number |
Default | 1 |
Demo | View demo |
Description | Extends the scrollable length of the page, giving a "slow scroll" experience. For example if the page content is 1400px in height, <ScrollerMotion scale={1.5} /> would result in a scrollable length of 2100px (height * scale ).The lowest this value can be is 1 , anything lower will be disregarded and 1 will be used in its place. |
spring
Type | SpringOptions |
Default | { mass: 1.25, stiffness: 200, damping: 50 } |
Demo | View demo |
Description | The main configuration object for the scroll's spring transform, basically the 2nd parameter to framer-motion's useSpring. You can disable the spring scroll by passing a falsy value to this prop, for example: <ScollerMotion spring={null} /> . |
useScrollerMotion
hookThis hook allows you to consume the internal MotionValue
values, returning an object of the following type:
{
scrollX: MotionValue,
scrollXProgress: MotionValue,
scrollY: MotionValue,
scrollYProgress: MotionValue,
x: MotionValue,
y: MotionValue
}
scrollX
& scrollY
: The current scroll position.scrollXProgress
& scrollYProgress
: A 0
to 1
transform of scrollX|scrollY
, similar to those returned by useScroll
.x
& y
: A negative representation of scrollX|scrollY
.It must be used within a <ScrollerMotion />
, to read the values in the parent component see Motion Listeners.
ℹ️ For accessing native scroll values (without spring motion or scale calculation) we suggest using framer-motion's
useScroll
.
import { ScrollerMotion, useScrollerMotion } from 'scroller-motion'
import { motion } from 'framer-motion'
const MyComponent = () => {
const { x, y } = useScrollerMotion()
return <motion.div style={{ x, y }}>Hello world</motion.div>
}
export default () => (
<ScrollerMotion>
<MyComponent />
</ScrollerMotion>
)
Another approach if you need to read/use the internal MotionValue
values is via the ref
prop on <ScrollerMotion />
. The type of the ref is the same as the object returned from useScrollerMotion
.
For example, if we want to use the y-axis scroll position:
import { useEffect, useRef } from 'react'
import { useMotionValue } from 'framer-motion'
import { ScrollerMotion, ScrollerMotionRef } from 'scroller-motion'
export default () => {
const scrollerMotion = useRef<ScrollerMotionRef>()
const scrollY = useMotionValue(0)
useEffect(() => {
const unsubscribe = scrollerMotion.current.scrollY.onChange((v) =>
scrollY.set(v)
)
return () => unsubscribe()
}, [scrollY])
return (
<ScrollerMotion ref={scrollerMotion}>
<MyComponent scrollPosition={scrollY} />
</ScrollerMotion>
)
}
ℹ️ For accessing native scroll values (without spring motion or scale calculation) we suggest using framer-motion's
useScroll
.
#hash
anchor.Scroller-motion was born from the need for motion/smooth scrolling in a couple of React projects. Given the fact that we were already using the beloved framer-motion
for the rest of the animations & transitions, we decided to try it out for page scrolling too - and the results were impressive! Time for an emoji list:
spring
propscale
propuseScrollerMotion
These are the current scripts available for development:
# Start Storybook
npm run start
# Build dist files
npm run build
# Build static Storybook
npm run build:storybook
# Apply Prettier formatting
npm run prettier:format
# Check Prettier formatting
npm run prettier:check
# Run tests
npm run test
Released under the MIT License.
Authored and maintained by Brad Adams with help from contributors.
breadadams.com · GitHub @breadadams · Twitter @breadadams
framer-motion
v9 and v10 peer-dependency warnings (#37)FAQs
🛹 Elegant motion scrolling for React
The npm package scroller-motion receives a total of 113 weekly downloads. As such, scroller-motion popularity was classified as not popular.
We found that scroller-motion demonstrated a not healthy version release cadence and project activity because the last version was released a year ago. It has 1 open source maintainer collaborating on the project.
Did you know?
Socket for GitHub automatically highlights issues in each pull request and monitors the health of all your open source dependencies. Discover the contents of your packages and block harmful activity before you install or update your dependencies.
Security News
PyPI now allows maintainers to archive projects, improving security and helping users make informed decisions about their dependencies.
Research
Security News
Malicious npm package postcss-optimizer delivers BeaverTail malware, targeting developer systems; similarities to past campaigns suggest a North Korean connection.
Security News
CISA's KEV data is now on GitHub, offering easier access, API integration, commit history tracking, and automated updates for security teams and researchers.