<!DOCTYPE html>
<html>

  <head>
    <script data-require="angular.js@*" data-semver="1.3.0-beta.5" src="https://code.angularjs.org/1.3.0-beta.5/angular.js"></script>
    <script data-require="jquery@*" data-semver="2.1.1" src="//cdnjs.cloudflare.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
    <link rel="stylesheet" href="style.css" />
    <script src="script.js"></script>
  </head>

  <body>
    <div data-ng-app="myApp">
      <div id="mainDiv" class="main" data-ng-controller="MainPageCtrl">
        <div id="top"></div>
        <h1>AngularJs scroll top on click with animate</h1>

                        <div class="header">
        header
        </div>
        <div class="content">
                  <br />
          <br />
          <br />
          <br />
          <br />
        content                    <br />
          <br />
          <br />
          <br />
          <br />
          <br />
          <br />
          <br />
          <br />
          <br />
          <br />
          <br />
          <br />
          <br />
          <br />
          <br />
          <br />
          <br />
          <br />
          <br />
          <br />
          <br />
          <br />
          <br />
          <br />
          <br />
          <br />
          <br />
          <br />
          <br />
          <br />
          <br />
          <br />
          <br />
          <br />
          <br />
          <br />
          <br />
          <br />
          <br />
          <br />
          <br />
          <br />
          <br />
          <br />
          <br />
          <br />
          <br />
          <br />
          <br />
          <br />
          <br />
        </div>
        <div class="footer">
        footer
          <div class="ScrollTopBtn animate-show" ng-show="isShowScrollTopBtn" style="position: fixed; bottom: 60px; right: 0;" scroll-on-click="top"></div>
        </div>
      </div>
    </div>
  </body>

</html>
var myApp = angular.module('myApp', []); 

myApp.directive('scrollOnClick', function () {
        return {
            restrict: 'A',
            link: function (scope, $elm, attr) {
                $elm.on('click', function () {
                    var ele = $("#" + attr.scrollOnClick);
                    $("body").animate({ scrollTop: ele.offset().top }, "slow");
                });
            }
        }
    });

myApp.controller('MainPageCtrl', ["$scope", "$window", function($scope, $window) {
function setShowScrollTopBtn() {
		        $scope.isShowScrollTopBtn = false;
		        $window = angular.element($window);
		        
		        $window.on('scroll', function () {
		            //alert(2); 
		            if ($window[0].scrollY > 200) {
		                $scope.isShowScrollTopBtn = true;
		                //alert($scope.isShowScrollTopBtn);
		            }
		            else {
		                $scope.isShowScrollTopBtn = false;
		            }

		            $scope.$apply();
		        });
		    }
		    setShowScrollTopBtn();
}]);
.ScrollTopBtn {
    background-image: url("https://cdn1.iconfinder.com/data/icons/musthave/32/Stock%20Index%20Up.png");
    height: 32px;
    width: 32px;
    background-position: 0px 0px;
    cursor: pointer;
    -webkit-transition: 0.25s;
    -moz-transition: 0.25s;
    -o-transition: 0.25s;
    transition: 0.25s;
}

    .ScrollTopBtn:hover {
        background-image: url("https://cdn1.iconfinder.com/data/icons/Hand_Drawn_Web_Icon_Set/32/arrow_up.png");
        height: 32px;
        width: 32px;
        background-position: 0px 32px;
    }
    
    /*animate-show start*/
.animate-show {
    -webkit-transition: all linear 0.5s;
    -moz-transition: all linear 0.5s;
    -o-transition: all linear 0.5s;
    transition: all linear 0.5s;
    opacity: 1;
    line-height: 20px;
}

    .animate-show.ng-hide-add,
    .animate-show.ng-hide-remove {
        display: block!important;
    }

    .animate-show.ng-hide {
        line-height: 0;
        opacity: 0;
    }
/*animate-show end*/