Sunday, April 24, 2016

How to Add Smooth Scrolling Back To Top Button using react js?

Leave a Comment

I have implemented this using jquery but want to create a component in react to do the same

<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> 

In my page footer

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

3 Answers

Answers 1

First, we need to track the page as it's scrolled in the state of the component. This tracking should only be happening while the component is mounted. This can be done like so:

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()}); }, 

Note: this is still using jQuery to get the current scroll position. See this question for doing this without jQuery.

Then we need to render the component:

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> } 

This is still using jQuery to do the actual scrolling. Have a look a this question for scrolling without jQuery.

If you want this component to fade in and out, you should wrap it in a ReactCSSTransitionGroup and use CSS animations. This is documented on the React docs.

Here's a JSFiddle demo.

Answers 2

After searching on google, I reached a jQuery code as your needs in JSFiddle . Then, I reordered your jQuery:

$(document).ready(function() {      $(window).scroll(function() {      if ($(this).scrollTop() > 100) {        $('.move-top').fadeIn();      } else {        $('.move-top').fadeOut();      }    });      $('.move-top').click(function() {      $("html, body").animate({        scrollTop: 0      }, 600);      return false;    });    });
.container {    min-height: 1000px;  }    .move-top {    position: fixed;    bottom: 50px;    right: 100px;    display: none;    padding: 10px 15px;    color: #fff;    font-weight: 600;    background: #333;  }
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.0.2/jquery.min.js"></script>  <h1>Page Header</h1>  <div class="container">    <p>      Lorem ipsum dolor sit amet, consectetur adipisicing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor      in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum.    </p>    <p>      Lorem ipsum dolor sit amet, consectetur adipisicing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor      in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum.    </p>    <p>      Lorem ipsum dolor sit amet, consectetur adipisicing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor      in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum.    </p>    <p>      Lorem ipsum dolor sit amet, consectetur adipisicing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor      in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum.    </p>    <p>      Lorem ipsum dolor sit amet, consectetur adipisicing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor      in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum.    </p>    <p>      Lorem ipsum dolor sit amet, consectetur adipisicing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor      in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum.    </p>    <p>      Lorem ipsum dolor sit amet, consectetur adipisicing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor      in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum.    </p>      <a class="move-top" href="#">↑</a>  </div>  <h3>Page Footer</h3>

Answers 3

Here you go.

var Example = React.createClass({     scrollUp: function () {         var doc = document.documentElement;         var top = (window.pageYOffset || doc.scrollTop) - (doc.clientTop || 0);          if (top > 0) {             window.scrollTo(0, top - 15)             setTimeout(this.scrollUp, 10)         }     },     render: function () {         return (<div><h1>Page Header</h1>             <div ref="container" className="container">                 <p>                     Lorem ipsum dolor sit amet, consectetur adipisicing elit, sed do eiusmod tempor incididunt ut labore                     et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut                     aliquip ex ea commodo consequat. Duis aute irure dolor                     in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint                     occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum.                 </p>                 <p>                     Lorem ipsum dolor sit amet, consectetur adipisicing elit, sed do eiusmod tempor incididunt ut labore                     et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut                     aliquip ex ea commodo consequat. Duis aute irure dolor                     in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint                     occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum.                 </p>                 <p>                     Lorem ipsum dolor sit amet, consectetur adipisicing elit, sed do eiusmod tempor incididunt ut labore                     et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut                     aliquip ex ea commodo consequat. Duis aute irure dolor                     in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint                     occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum.                 </p>                 <p>                     Lorem ipsum dolor sit amet, consectetur adipisicing elit, sed do eiusmod tempor incididunt ut labore                     et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut                     aliquip ex ea commodo consequat. Duis aute irure dolor                     in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint                     occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum.                 </p>                 <p>                     Lorem ipsum dolor sit amet, consectetur adipisicing elit, sed do eiusmod tempor incididunt ut labore                     et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut                     aliquip ex ea commodo consequat. Duis aute irure dolor                     in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint                     occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum.                 </p>                 <p>                     Lorem ipsum dolor sit amet, consectetur adipisicing elit, sed do eiusmod tempor incididunt ut labore                     et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut                     aliquip ex ea commodo consequat. Duis aute irure dolor                     in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint                     occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum.                 </p>                 <p>                     Lorem ipsum dolor sit amet, consectetur adipisicing elit, sed do eiusmod tempor incididunt ut labore                     et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut                     aliquip ex ea commodo consequat. Duis aute irure dolor                     in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint                     occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum.                 </p>                  <a className="move-top" onClick={this.scrollUp}>Up</a>             </div>         </div>);     } }); 
If You Enjoyed This, Take 5 Seconds To Share It

0 comments:

Post a Comment