代码之家  ›  专栏  ›  技术社区  ›  Sammy

使用react refs触发命令式动画

  •  2
  • Sammy  · 技术社区  · 6 年前

    在文档中,有一个用于refs的用例:

    Triggering imperative animations.

    有人能举个例子说明怎么做吗?在使用ref将div滚动到视图中之后,我试图让用户注意到它,我认为这可能是一个理想的用例,也许吧?

    1 回复  |  直到 6 年前
        1
  •  2
  •   Arman Charan    6 年前

    Refs and the DOM 我是说, EventTarget.addEventListener() ,和 Element.getBoundingClientRect() 更多信息。

    // Imperative Animation
    class ImperativeAnimation extends React.Component {
    
      // State.
      state = {background: '#fff'}
    
      // Render.
      render = () => (
        <div ref={this.divRef} style={{height: '200vh', background: this.state.background}}>
          Scroll to turn background papayawhip.
        </div>
      )
      
      // Did Mount.
      componentDidMount() {
        window.addEventListener('scroll', this.onScroll)
      }
      
      // Div Ref.
      divRef = React.createRef()
      
      // On Scroll
      onScroll = event => {
        const div = this.divRef.current
        const {y} = div.getBoundingClientRect()
        if (y <= 0) this.setState({background: 'papayawhip'})
        else this.setState({background: '#fff'})
      }
      
    }
    
    // Mount.
    ReactDOM.render(<ImperativeAnimation/>, document.querySelector('#root'))
    <script crossorigin src="https://unpkg.com/react@16/umd/react.development.js"></script>
    <script crossorigin src="https://unpkg.com/react-dom@16/umd/react-dom.development.js"></script>
    <div id="root"></div>