文档

文档

React

useScroll

useScroll

useScroll 用于创建与滚动链接的动画,例如进度指示器和视差效果。

const { scrollYProgress } = useScroll()

return <motion.div style={{ scaleX: scrollYProgress }} />

用法

从 Motion 导入 useScroll

import { useScroll } from "motion/react"

useScroll 返回四个motion values(Motion 值):

  • scrollX/Y:绝对滚动位置,以像素为单位。

  • scrollXProgress/YProgress:定义偏移量之间的滚动位置,值为 01 之间。

页面滚动

默认情况下,useScroll 跟踪页面滚动。

const { scrollY } = useScroll()

useMotionValueEvent(scrollY, "change", (latest) => {
  console.log("Page scroll: ", latest)
})

例如,我们可以通过将 scrollYProgress 直接传递给进度条的 scaleX 样式来显示页面滚动指示器。

const { scrollYProgress } = useScroll()

return <motion.div style={{ scaleX: scrollYProgress }} />

由于 useScroll 返回 motion values(Motion 值),我们可以将此滚动信息与其他 motion value(Motion 值)钩子(如 useTransformuseSpring)组合使用

const { scrollYProgress } = useScroll()
const scaleX = useSpring(scrollYProgress)

return <motion.div style={{ scaleX }} />

由于 scrollY 是一个 MotionValue,因此您可以使用一个巧妙的技巧来判断用户的滚动方向何时改变

const { scrollY } = useScroll()
const [scrollDirection, setScrollDirection] = useState("down")

useMotionValueEvent(scrollY, "change", (current) => {
  const diff = current - scrollY.getPrevious()
  setScrollDirection(diff > 0 ? "down" : "up")
})

非常适合触发粘性页眉动画!

~ Sam Selikoff,Motion for React Recipes(React 食谱的 Motion)

元素滚动

要跟踪可滚动元素的滚动位置,我们可以将元素的 ref 传递给 useScrollcontainer 选项

const carouselRef = useRef(null)
const { scrollX } = useScroll({
  container: carouselRef
})

return (
  <div ref={carouselRef} style={{ overflow: "scroll" }}>
    {children}
  </div>
)

元素位置

我们可以通过将其 ref 传递给 target 选项来跟踪元素在容器内移动的进度。

const ref = useRef(null)
const { scrollYProgress } = useScroll({
  target: ref,
  offset: ["start end", "end end"]
})

return <div ref={ref}>

在此示例中,每个项目都有其自己的进度指示器。

滚动偏移量

使用the(这个)offset(偏移量)option(选项)我们可以定义要使用视口跟踪元素的哪些部分,例如,跟踪从底部进入、从顶部离开或在整个视口中移动的元素。

API

useScroll 接受以下选项。

container(容器)

默认值:浏览器窗口

要跟踪其滚动位置的可滚动容器。默认情况下,这是窗口视口。但它可以是任何可滚动元素。

target(目标)

默认情况下,这是容器的可滚动区域。它还可以设置为另一个元素,以跟踪其在视口内的进度。

axis(轴)

默认值:"y"

应用 offset 的滚动轴。

offset(偏移量)

默认值: ["start start", "end end"]

offset 描述交点,即 targetcontainer 相遇的点。

例如,交点 "start end" 表示 目标的开始 在跟踪轴上与 容器的结束 相遇。

因此,如果目标是一个元素,容器是窗口,并且我们正在跟踪垂直轴,则 "start end"元素的顶部视口的底部 相遇的位置。

接受的交点

目标点和容器点都可以定义为

  • 数字:0 表示轴的开始,1 表示结束。因此,要定义目标的顶部与容器的中间对齐,您可以定义 "0 0.5"。允许超出此范围的值。

  • 名称:"start""center""end" 可以用作 00.51 的清晰快捷方式。

  • 像素:像素值(如 "100px""-50px")将被定义为距目标/容器起点的像素数。

  • 百分比:与原始数字相同,但表示为 "0%""100%"

  • 视口:接受 "vh""vw" 单位。

示例

React Three Fiber

滚动速度

useScroll 用于创建与滚动链接的动画,例如进度指示器和视差效果。

const { scrollYProgress } = useScroll()

return <motion.div style={{ scaleX: scrollYProgress }} />

用法

从 Motion 导入 useScroll

import { useScroll } from "motion/react"

useScroll 返回四个motion values(Motion 值):

  • scrollX/Y:绝对滚动位置,以像素为单位。

  • scrollXProgress/YProgress:定义偏移量之间的滚动位置,值为 01 之间。

页面滚动

默认情况下,useScroll 跟踪页面滚动。

const { scrollY } = useScroll()

useMotionValueEvent(scrollY, "change", (latest) => {
  console.log("Page scroll: ", latest)
})

例如,我们可以通过将 scrollYProgress 直接传递给进度条的 scaleX 样式来显示页面滚动指示器。

const { scrollYProgress } = useScroll()

return <motion.div style={{ scaleX: scrollYProgress }} />

由于 useScroll 返回 motion values(Motion 值),我们可以将此滚动信息与其他 motion value(Motion 值)钩子(如 useTransformuseSpring)组合使用

const { scrollYProgress } = useScroll()
const scaleX = useSpring(scrollYProgress)

return <motion.div style={{ scaleX }} />

由于 scrollY 是一个 MotionValue,因此您可以使用一个巧妙的技巧来判断用户的滚动方向何时改变

const { scrollY } = useScroll()
const [scrollDirection, setScrollDirection] = useState("down")

useMotionValueEvent(scrollY, "change", (current) => {
  const diff = current - scrollY.getPrevious()
  setScrollDirection(diff > 0 ? "down" : "up")
})

非常适合触发粘性页眉动画!

~ Sam Selikoff,Motion for React Recipes(React 食谱的 Motion)

元素滚动

要跟踪可滚动元素的滚动位置,我们可以将元素的 ref 传递给 useScrollcontainer 选项

const carouselRef = useRef(null)
const { scrollX } = useScroll({
  container: carouselRef
})

return (
  <div ref={carouselRef} style={{ overflow: "scroll" }}>
    {children}
  </div>
)

元素位置

我们可以通过将其 ref 传递给 target 选项来跟踪元素在容器内移动的进度。

const ref = useRef(null)
const { scrollYProgress } = useScroll({
  target: ref,
  offset: ["start end", "end end"]
})

return <div ref={ref}>

在此示例中,每个项目都有其自己的进度指示器。

滚动偏移量

使用the(这个)offset(偏移量)option(选项)我们可以定义要使用视口跟踪元素的哪些部分,例如,跟踪从底部进入、从顶部离开或在整个视口中移动的元素。

API

useScroll 接受以下选项。

container(容器)

默认值:浏览器窗口

要跟踪其滚动位置的可滚动容器。默认情况下,这是窗口视口。但它可以是任何可滚动元素。

target(目标)

默认情况下,这是容器的可滚动区域。它还可以设置为另一个元素,以跟踪其在视口内的进度。

axis(轴)

默认值:"y"

应用 offset 的滚动轴。

offset(偏移量)

默认值: ["start start", "end end"]

offset 描述交点,即 targetcontainer 相遇的点。

例如,交点 "start end" 表示 目标的开始 在跟踪轴上与 容器的结束 相遇。

因此,如果目标是一个元素,容器是窗口,并且我们正在跟踪垂直轴,则 "start end"元素的顶部视口的底部 相遇的位置。

接受的交点

目标点和容器点都可以定义为

  • 数字:0 表示轴的开始,1 表示结束。因此,要定义目标的顶部与容器的中间对齐,您可以定义 "0 0.5"。允许超出此范围的值。

  • 名称:"start""center""end" 可以用作 00.51 的清晰快捷方式。

  • 像素:像素值(如 "100px""-50px")将被定义为距目标/容器起点的像素数。

  • 百分比:与原始数字相同,但表示为 "0%""100%"

  • 视口:接受 "vh""vw" 单位。

示例

React Three Fiber

滚动速度

useScroll 用于创建与滚动链接的动画,例如进度指示器和视差效果。

const { scrollYProgress } = useScroll()

return <motion.div style={{ scaleX: scrollYProgress }} />

用法

从 Motion 导入 useScroll

import { useScroll } from "motion/react"

useScroll 返回四个motion values(Motion 值):

  • scrollX/Y:绝对滚动位置,以像素为单位。

  • scrollXProgress/YProgress:定义偏移量之间的滚动位置,值为 01 之间。

页面滚动

默认情况下,useScroll 跟踪页面滚动。

const { scrollY } = useScroll()

useMotionValueEvent(scrollY, "change", (latest) => {
  console.log("Page scroll: ", latest)
})

例如,我们可以通过将 scrollYProgress 直接传递给进度条的 scaleX 样式来显示页面滚动指示器。

const { scrollYProgress } = useScroll()

return <motion.div style={{ scaleX: scrollYProgress }} />

由于 useScroll 返回 motion values(Motion 值),我们可以将此滚动信息与其他 motion value(Motion 值)钩子(如 useTransformuseSpring)组合使用

const { scrollYProgress } = useScroll()
const scaleX = useSpring(scrollYProgress)

return <motion.div style={{ scaleX }} />

由于 scrollY 是一个 MotionValue,因此您可以使用一个巧妙的技巧来判断用户的滚动方向何时改变

const { scrollY } = useScroll()
const [scrollDirection, setScrollDirection] = useState("down")

useMotionValueEvent(scrollY, "change", (current) => {
  const diff = current - scrollY.getPrevious()
  setScrollDirection(diff > 0 ? "down" : "up")
})

非常适合触发粘性页眉动画!

~ Sam Selikoff,Motion for React Recipes(React 食谱的 Motion)

元素滚动

要跟踪可滚动元素的滚动位置,我们可以将元素的 ref 传递给 useScrollcontainer 选项

const carouselRef = useRef(null)
const { scrollX } = useScroll({
  container: carouselRef
})

return (
  <div ref={carouselRef} style={{ overflow: "scroll" }}>
    {children}
  </div>
)

元素位置

我们可以通过将其 ref 传递给 target 选项来跟踪元素在容器内移动的进度。

const ref = useRef(null)
const { scrollYProgress } = useScroll({
  target: ref,
  offset: ["start end", "end end"]
})

return <div ref={ref}>

在此示例中,每个项目都有其自己的进度指示器。

滚动偏移量

使用the(这个)offset(偏移量)option(选项)我们可以定义要使用视口跟踪元素的哪些部分,例如,跟踪从底部进入、从顶部离开或在整个视口中移动的元素。

API

useScroll 接受以下选项。

container(容器)

默认值:浏览器窗口

要跟踪其滚动位置的可滚动容器。默认情况下,这是窗口视口。但它可以是任何可滚动元素。

target(目标)

默认情况下,这是容器的可滚动区域。它还可以设置为另一个元素,以跟踪其在视口内的进度。

axis(轴)

默认值:"y"

应用 offset 的滚动轴。

offset(偏移量)

默认值: ["start start", "end end"]

offset 描述交点,即 targetcontainer 相遇的点。

例如,交点 "start end" 表示 目标的开始 在跟踪轴上与 容器的结束 相遇。

因此,如果目标是一个元素,容器是窗口,并且我们正在跟踪垂直轴,则 "start end"元素的顶部视口的底部 相遇的位置。

接受的交点

目标点和容器点都可以定义为

  • 数字:0 表示轴的开始,1 表示结束。因此,要定义目标的顶部与容器的中间对齐,您可以定义 "0 0.5"。允许超出此范围的值。

  • 名称:"start""center""end" 可以用作 00.51 的清晰快捷方式。

  • 像素:像素值(如 "100px""-50px")将被定义为距目标/容器起点的像素数。

  • 百分比:与原始数字相同,但表示为 "0%""100%"

  • 视口:接受 "vh""vw" 单位。

示例

React Three Fiber

滚动速度

保持关注

订阅以获取最新消息和更新。

保持关注

订阅以获取最新消息和更新。