【发布时间】:2020-07-18 17:34:28
【问题描述】:
在 vanilla Javascript 中有相对简单的方法可以实现这一点(请参阅 this 了解其中一种方法),但我正在努力让类似的东西在 React 中工作,尤其是使用像 Framer Motion 这样的动画库。
Framer Motion 的 useViewPortScroll 返回一个方便的 scrollYProgress 对象,其“current”属性告诉您用户当前滚动页面的百分比。
我想使用这个属性来做这样的事情:const pts = path.getPointAtLength(scrollPercentage * pathLength);,然后使用pts.x 和pts.y 作为圆形 SVG 的 x 和 y 属性 - 所以每次我滚动向下(或向上)页面,圆圈的位置将沿 SVG 路径更新/动画。
我正在努力让它与 React 更具声明性的风格一起使用,因为我必须对 circle 和 path 元素使用 refs,这意味着我必须将上述 pts = path.getPointAtLength... 代码 放在里面 的 useEffect 调用,两个 refs 作为依赖项(否则 refs 将未定义,在这种情况下,我的圆形 SVG 的 x 和 y 上的 pts.x 和 pts.y 属性在第一次渲染时将无法访问。
有没有人解决过类似的问题或者可以提供指导?
【问题讨论】:
标签: javascript reactjs svg framer-motion