javascript - 如何使用 react js 添加平滑滚动返回顶部按钮?

标签 javascript jquery html css reactjs

我已经使用 jquery 实现了这个,但想在 React 中创建一个组件来做同样的事情

<script>            
jQuery(document).ready(function() {
    var offset = 220;
    var duration = 500;
    jQuery(window).scroll(function() {
        if (jQuery(this).scrollTop() > offset) {
            jQuery('.move-top').fadeIn(duration);
        } else {
            jQuery('.move-top').fadeOut(duration);
        }
    });

    jQuery('.move-top').click(function(event) {
        event.preventDefault();
        jQuery('html, body').animate({scrollTop: 0}, duration);
        return false;
    })
});
</script>

在我的页脚

<a href="#" class="move-top">↑</a>

最佳答案

首先,我们需要跟踪页面在组件状态下的滚动情况。这种跟踪应该只在组件安装时发生。这可以像这样完成:

getInitialState: function() {
  return { scrollTop: 0 };
},
componentWillMount: function() {
  window.addEventListener('scroll', this.handleScroll);
},
componentWillUnmount: function() {
  window.removeEventListener('scroll', this.handleScroll);
},
handleScroll: function() {
   this.setState({scrollTop: $(window).scrollTop()});
},

注意:这里依然是使用jQuery获取当前滚动位置。参见 this question不用 jQuery 就可以做到这一点。

然后我们需要渲染组件:

scrollToTop: function() {
  $(window).animate({scrollTop: 0}, this.props.duration);
},
render: function() {
  if (this.state.scrollTop < this.props.offset) {
    return null;
  }

  return <a href="#" className="move-top" onClick={this.scrollToTop}>↑</a>
}

这仍然使用 jQuery 来进行实际的滚动。看看this question无需 jQuery 即可滚动。

如果你想让这个组件淡入淡出,你应该把它包裹在一个 ReactCSSTransitionGroup 中并使用 CSS 动画。这记录在 React docs 上.

这是一个 JSFiddle演示。

关于javascript - 如何使用 react js 添加平滑滚动返回顶部按钮?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34228439/

相关文章:

javascript - 用数字替换单词

javascript - Ajax 结果在 alert() 中

html - 我的 Chrome 扩展程序中的 "Unknown error"

javascript - 当存在名为“提交”的输入时,如何使用 javascript 提交表单?

php - 想要我的文本区域格式它是像 html 这样的只读文本

javascript - 避免 Web 评级功能的轮子重新发明

javascript - 如何使用js固定和取消固定元素

javascript - jQuery 如何将多个 img src 追加到一个数组中

javascript - 手动渲染 SVG 字形

css - 帮助处理 html 中不受控制的文本