scroll.ts 1.0 KB

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