index.vue 1.1 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364
  1. <template>
  2. <view class="skeleton-box">
  3. <view v-if="loading" class="skeleton">
  4. <text>数据加载中...</text>
  5. <!-- <view class="led" :style="{'--i':index,'--all':25}" v-for="(item,index) in 25" :key='index' /> -->
  6. </view>
  7. <van-transition v-else-if="list.length==0" name="fade-up">
  8. <view class="skeleton">
  9. 暂时没有数据
  10. </view>
  11. </van-transition>
  12. <van-transition v-else name="fade-up">
  13. <slot></slot>
  14. </van-transition>
  15. </view>
  16. </template>
  17. <script>
  18. export default {
  19. props: {
  20. loading: {
  21. type: Boolean,
  22. default: true
  23. },
  24. list: {
  25. type: Array,
  26. default: [1]
  27. }
  28. }
  29. }
  30. </script>
  31. <style lang="scss" scoped>
  32. .skeleton {
  33. display: flex;
  34. justify-content: center;
  35. align-items: center;
  36. padding: 50rpx;
  37. height: 320rpx;
  38. }
  39. .led {
  40. width: 10rpx;
  41. height: 30rpx;
  42. border-radius: 10rpx;
  43. top: 50rpx;
  44. position: absolute;
  45. transform: rotate(calc(360deg / var(--all) * var(--i)));
  46. transform-origin: 0 160rpx;
  47. animation: loading 2s linear infinite;
  48. animation-delay: calc(var(--i) * 1s);
  49. background-color: green;
  50. }
  51. @keyframes loading {
  52. from {
  53. opacity: 0;
  54. }
  55. to {
  56. opacity: 1;
  57. }
  58. }
  59. </style>