SecondPageNext.svelte 1.3 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546
  1. <script>
  2. import { createEventDispatcher } from 'svelte';
  3. import Page from './Page.svelte';
  4. // 定义事件派发器
  5. // Define event dispatcher
  6. const dispatch = createEventDispatcher();
  7. export let pageCol = 3;
  8. export let Pages = [];
  9. export let maxShowPage = 9;
  10. export let radius = 'md'; // 'base'/'md'/'lg'/'xl'/'full'/'none'
  11. export let type = 'bold'; // 'border'/'block'/'bold'
  12. // 点击页码
  13. // click page
  14. const clickItemFunc = index => {
  15. dispatch('clickItem', index);
  16. };
  17. </script>
  18. {#if Pages.length > 0}
  19. <div
  20. class="absolute -top-3 bg-white dark:bg-black grid divide-x translate-x-1/2 -translate-y-full rounded-lg shadow dark:shadow-white/10 p-1 gap-y-2 max-h-[7.25rem] overflow-y-auto second-page-contents"
  21. style="width: calc({(pageCol / (maxShowPage + 2)) * 100}% + 8px);right:{(2.5 / (maxShowPage + 2)) *
  22. 100}%;grid-template-columns: repeat({pageCol}, minmax(0, 1fr));"
  23. >
  24. {#each Pages as item}
  25. <Page on:click={() => clickItemFunc(item)} {type} {radius}>{item}</Page>
  26. {/each}
  27. </div>
  28. <div
  29. class="absolute -top-3 w-0 h-0 border-8 border-t-8 border-transparent translate-x-1/2 border-t-white dark:border-t-black"
  30. style="right:{(2.5 / (maxShowPage + 2)) * 100}%;"
  31. />
  32. {/if}
  33. <style>
  34. .second-page-contents::-webkit-scrollbar {
  35. display: none; /* Chrome Safari */
  36. }
  37. </style>