当前位置:   article > 正文

Loading 加载 Taro + vue3 自定义组件的封装和 分页 优化_taro vue3 onload

taro vue3 onload

1.需求

  当需要实现一个组件 上拉加载的组件 我们可以选择某些组件库的组件。

  但是有的组件没有这个组件,比如跟Taro 框架配套的京东nut-ui组件库 没有提供这个功能,

2.Loading组件

①封装

  1. <template>
  2. <div class="container">
  3. <div class="tip" v-if="page >= total && tipFlag">没有更多数据了呢~</div>
  4. <div class="loading-box" v-if="loadingFlag && page <= total">
  5. <div class="loading-box-text">
  6. <div class="loading"></div>
  7. <div class="text">正在加载中...</div>
  8. </div>
  9. </div>
  10. <div style="height: 50px;"></div>
  11. </div>
  12. </template>
  13. <script setup>
  14. import { ref, toRefs } from "vue";
  15. const props = defineProps({
  16. page: Number, //接受页数
  17. total: Number, //接收总页数
  18. loadingFlag: Boolean, //是否正在加载数据
  19. tipFlag: Boolean, //是否显示 "没有更多数据的提示"
  20. });
  21. const { pag, total, loadingFlag, tipFlag } = toRefs(props)
  22. </script>
  23. <style lang="scss">
  24. .container {
  25. padding: 30px;
  26. .tip {
  27. color: #858a99;
  28. font-size: 24px;
  29. text-align: center;
  30. margin: 5px;
  31. }
  32. .loading-box {
  33. display: flex;
  34. justify-content: center;
  35. align-items: center;
  36. margin-bottom: 6px;
  37. .loading-box-text {
  38. display: flex;
  39. align-items: center;
  40. color: #858a99;
  41. .text {
  42. font-size: 18px;
  43. margin-left: 8px;
  44. }
  45. .loading {
  46. width: 14px;
  47. height: 14px;
  48. border: 2px solid #858a99;
  49. border-top-color: transparent;
  50. border-radius: 100%;
  51. text-align: center;
  52. animation: circle infinite 0.75s linear;
  53. }
  54. // 转转转动画
  55. @keyframes circle {
  56. 0% {
  57. transform: rotate(0);
  58. }
  59. 100% {
  60. transform: rotate(360deg);
  61. }
  62. }
  63. }
  64. }
  65. }
  66. </style>

② 使用 

  1. <Loading :page="pageinfo.currentPage" :total="totalpage" :loadingFlag="loadingFlag"
  2. :tipFlag="tipFlag">
  3. </Loading>

3.分页节流的使用

  1. //分页 节流
  2. const throttle = (func, delay) => {
  3. let lastTime = 0;
  4. return function () {
  5. const now = new Date().getTime();
  6. if (now - lastTime >= delay) {
  7. func.apply(this, arguments);
  8. lastTime = now;
  9. }
  10. };
  11. }
  12. //分页
  13. const onScrollBottom = throttle(() => {
  14. console.log("到底了");
  15. loadingFlag.value = true;
  16. tipFlag.value = false;
  17. if (pageInfo.value.currentPage < total.value) {
  18. pageInfo.value.currentPage++;
  19. getRuleList(1);
  20. } else {
  21. loadingFlag.value = false;
  22. tipFlag.value = true;
  23. }
  24. }, 200);
  25. // 在绑定滚动事件时使用 onScrollBottom
  26. window.addEventListener('scroll', onScrollBottom);//获取规则列表

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/喵喵爱编程/article/detail/770716
推荐阅读
相关标签
  

闽ICP备14008679号