scroll.ts 980 B

12345678910111213141516171819202122232425262728293031323334353637383940414243
  1. import PerfectScrollbar from 'perfect-scrollbar';
  2. import coreModule from 'app/core/core_module';
  3. import appEvents from 'app/core/app_events';
  4. export function geminiScrollbar() {
  5. return {
  6. restrict: 'A',
  7. link: function(scope, elem, attrs) {
  8. let scrollbar = new PerfectScrollbar(elem[0]);
  9. let lastPos = 0;
  10. appEvents.on(
  11. 'dash-scroll',
  12. evt => {
  13. if (evt.restore) {
  14. elem[0].scrollTop = lastPos;
  15. return;
  16. }
  17. lastPos = elem[0].scrollTop;
  18. if (evt.animate) {
  19. elem.animate({ scrollTop: evt.pos }, 500);
  20. } else {
  21. elem[0].scrollTop = evt.pos;
  22. }
  23. },
  24. scope
  25. );
  26. scope.$on('$routeChangeSuccess', () => {
  27. lastPos = 0;
  28. elem[0].scrollTop = 0;
  29. });
  30. scope.$on('$destroy', () => {
  31. scrollbar.destroy();
  32. });
  33. },
  34. };
  35. }
  36. coreModule.directive('grafanaScrollbar', geminiScrollbar);