【问题标题】:How to animate input field using React spring如何使用 React spring 为输入字段设置动画
【发布时间】:2021-01-27 21:56:06
【问题描述】:

目前我正在开发 React Weather 应用程序,我正在尝试将输入字段从应用程序的中间动画化到应用程序的顶部。当 Axios 调用被填满时,这个动画应该会触发。在此输入字段中,您应该输入您想知道预测的城市名称。

找到城市后,此输入字段应移至 App 顶部,来自 api 响应的所有其他信息应从底部淡入。但首先要做的事情。

我已经尝试了过去 3 个小时的所有操作,但我就是无法完成。

声明动画

  const [moveInput, setMoveInput] = useState(true)

  const inputTransitions = useTransition(moveInput, null, {
    from: { transform: 'translateY(-50%)' },
    enter: { transform: 'translateY(100)' },
    leave: { transform: 'translateY(-100%)' },
  })

我真的不知道我必须在其中插入什么数字,输入和离开变量。我已经尝试了一切,它甚至没有动。

这是我的 axios 调用

  axios.get(
    `https://api.openweathermap.org/data/2.5/onecall?lat=${lat}&lon=${lon}&exclude=minutely&units=metric&appid=${apiKey}`
  ).then(response => {
    //Push results to state
    setForecast(prevState => ({
      ...prevState,
      week:response.data.daily,
      humidity: response.data.current.humidity+'%'
    }))

    setMoveInput(false);
  })

我想通过 setMoveInput 函数我可以触发这个动画。

渲染中

{inputTransitions.map(({ item, key, props }) =>
            item && <animated.div
                         key={key} 
                         style={props}
                         >  
                                <SearchForm 
                                  searchCity={searchCity} 
                                />
                         </animated.div>
            )}

输入 css

input{
    left: 50%;
    top: 50%;
    position: absolute;
    -webkit-transform: translate3d(-50%, -50%, 0);
    -moz-transform: translate3d(-50%, -50%, 0);
    transform: translate3d(-50%, -50%, 0);
}

当我将 SearchInput 组件放入该动画 div 时,这意味着该 div 应该是动画的。

请有人向我解释一下这是如何工作的?我试图从官方文档中理解它,但没有像这种情况这样的例子..

非常感谢

【问题讨论】:

    标签: javascript reactjs transition react-transition-group react-spring


    【解决方案1】:

    如果你想移动同一个元素,你应该使用useSpring而不是useTransition。如果您将 div 平移 50%,那么它将以 div 高度的 50% 移动它。所以它会移动它一点点。我建议使用 % 的 vh(视口高度)。

      const props = useSpring({
        transform: moveInput ? "translateY(50vh)" : "translateY(1vh)"
      });
    

    您还应该知道,您的 css 位于 div 的内部。您可能希望将其添加到动画 div。

    这是我的例子: https://codesandbox.io/s/animate-search-between-top-and-center-jj4eh

    【讨论】:

    • 它似乎对你有用,但我真的不知道为什么不适合我。我已经完全复制了你的示例中的所有内容,但仍然无法正常工作。你能帮我吗?
    • 也许问题出在您输入的绝对位置上。它不会与您的动画.div 一起移动。从 css 中删除它或尝试删除所有输入 css。
    • 现在我看到它有效。但是小问题仍然存在。输入并不完全在中间。它有点过头了,离底部更近了。你知道可能是什么问题吗?
    • 我已经完全删除了 .search 类,而不是 50vh 我放了 38vh。这对我来说是页面的中间部分。目前一切正常。但我不认为这是正确的,因为 38vh 在逻辑上不能是中间
    • 如果没有看到整个代码,很难给出建议。我建议查找绝对和相对定位。此外,如果您不想花更多时间解决这个问题,那么就让它保持原样吧。
    猜你喜欢
    • 2021-03-16
    • 2019-07-10
    • 2019-01-28
    • 1970-01-01
    • 2021-04-28
    • 2020-11-02
    • 2023-01-12
    • 2021-04-12
    • 2021-04-16
    相关资源
    最近更新 更多