ScrollAndFetchHandler.vue 919 B

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647
  1. <script>
  2. export default {
  3. data() {
  4. return {
  5. position: 1,
  6. maxPosition: 1,
  7. isGettingSet: false,
  8. loadAllSongs: false,
  9. interval: null
  10. };
  11. },
  12. computed: {
  13. setsLoaded() {
  14. return this.position - 1;
  15. },
  16. maxSets() {
  17. return this.maxPosition - 1;
  18. }
  19. },
  20. unmounted() {
  21. clearInterval(this.interval);
  22. },
  23. methods: {
  24. handleScroll() {
  25. const scrollPosition = document.body.clientHeight + window.scrollY;
  26. const bottomPosition = document.body.scrollHeight;
  27. if (this.loadAllSongs) return false;
  28. if (scrollPosition + 400 >= bottomPosition) this.getSet();
  29. return this.maxPosition === this.position;
  30. },
  31. loadAll() {
  32. this.loadAllSongs = true;
  33. this.interval = setInterval(() => {
  34. if (this.loadAllSongs && this.maxPosition > this.position)
  35. this.getSet();
  36. else {
  37. clearInterval(this.interval);
  38. this.loadAllSongs = false;
  39. }
  40. }, 500);
  41. }
  42. }
  43. };
  44. </script>