1

I have an simple ng-repeat that is populating a large number of table columns inside of a wrapper with a overflow-x: auto style. The result is a horizontal scrollbar with a bunch of information like so: http://www.websitecodetutorials.com/code/photo-galleries/css-horizontal-scroller1-demo.php

Every time the scope's data changes, the table updates and refreshes with new columns of information. My question becomes.. how can I force it to scroll all the way to the end on every initialization? My first attempt was to build a directive like this and assign "scroller" as an attribute to the wrapper:

app.directive('scroller', function() {
  return {
    // Restrict it to be an attribute in this case
    restrict: 'A',
    // responsible for registering DOM listeners as well as updating the DOM
    link: function(scope, element, attrs) {
      $(this).animate({ scrollLeft: '+=5200' }, 800, function() { });
    }
  };
});

How can I make the controller re-load data and then 'scrollLeft" 100% to the end (in sequence)? I have managed to hack it in jQuery and make it scroll when other events fire, but this isn't optimal since it should be happening at the end of the update cycle.

1 Answer 1

2

The link function gets called right before the updated elements are added to the DOM, so that may be why your animation call isn't working. Try adding a timeout and see if that works:

app.directive('scroller', function($timeout) {
  return {
    // Restrict it to be an attribute in this case
    restrict: 'A',
    // responsible for registering DOM listeners as well as updating the DOM
    link: function(scope, element, attrs) {
      $timeout(function() {
        element.animate({ scrollLeft: '+=5200' }, 800, function() { });
      }, 1);
    }
  };
});

I didn't test this, but figured I'd post it in case it helps.

Sign up to request clarification or add additional context in comments.

1 Comment

i tested it in code similar to this and your wrap it in $timeout works

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.