function scrollHandler() {
            var newScrollTop = $elm[0].scrollTop;
            var newScrollLeft = gridUtil.normalizeScrollLeft($elm, grid);

            var vertScrollPercentage = rowContainer.scrollVertical(newScrollTop);
            var horizScrollPercentage = colContainer.scrollHorizontal(newScrollLeft);

            var scrollEvent = new ScrollEvent(grid, rowContainer, colContainer, ScrollEvent.Sources.ViewPortScroll);
            scrollEvent.newScrollLeft = newScrollLeft;
            scrollEvent.newScrollTop = newScrollTop;
            if ( horizScrollPercentage > -1 ) {
              scrollEvent.x = { percentage: horizScrollPercentage };
            }

            if ( vertScrollPercentage > -1 ) {
              scrollEvent.y = { percentage: vertScrollPercentage };
            }

            grid.scrollContainers($scope.$parent.containerId, scrollEvent);
          }
@ngdoc function
@name customScroller
@methodOf ui.grid.class:GridOptions
@description (optional) uiGridViewport.on('scroll', scrollHandler) by default.
A function that allows you to provide your own scroller function. It is particularly helpful if you want to use third party scrollers
as this allows you to do that.

<div class="alert alert-info" role="alert"> <strong>NOTE:</strong> It is important to remember to always pass in an event object to
the scrollHandler as the grid scrolling behavior will break without it.</div>
<h5>Example</h5>
<pre>
  $scope.gridOptions = {
      customScroller: function myScrolling(uiGridViewport, scrollHandler) {
          uiGridViewport.on('scroll', function myScrollingOverride(event) {
              // Do something here

              scrollHandler(event);
          });
      }
  };
</pre>
@param {object} uiGridViewport Element being scrolled. (this gets passed in by the grid).
@param {function} scrollHandler Function that needs to be called when scrolling happens. (this gets passed in by the grid).