scroll.ts 1023 B

123456789101112131415161718192021222324252627282930313233343536373839404142434445
  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. wheelPropagation: true,
  10. });
  11. let lastPos = 0;
  12. appEvents.on(
  13. 'dash-scroll',
  14. evt => {
  15. if (evt.restore) {
  16. elem[0].scrollTop = lastPos;
  17. return;
  18. }
  19. lastPos = elem[0].scrollTop;
  20. if (evt.animate) {
  21. elem.animate({ scrollTop: evt.pos }, 500);
  22. } else {
  23. elem[0].scrollTop = evt.pos;
  24. }
  25. },
  26. scope
  27. );
  28. scope.$on('$routeChangeSuccess', () => {
  29. lastPos = 0;
  30. elem[0].scrollTop = 0;
  31. });
  32. scope.$on('$destroy', () => {
  33. scrollbar.destroy();
  34. });
  35. },
  36. };
  37. }
  38. coreModule.directive('grafanaScrollbar', geminiScrollbar);