vue 使用element滚动加载数据(v-infinite-scroll)

在这里插入图片描述
参考element
页面

el-scrollbar(style="height: calc(100% - 35px);" class="infinite-list-wrapper")
  .infiniteBox(class="list" v-infinite-scroll="load1" :infinite-scroll-disabled="disabled")
    .tableContent(v-for="item,index of warnList1" :key="index" class="list-item")
      .indexCell {{ index + 1 }}
      .timeCell {{ item.event_begin_time }}
      .localtionCell {{ item.monitoring_lane }}
      .descriptionCell {{ item.event_desc }}
      .reasonCell {{ item.event_reason }}
  .infiniteText(v-if="loading") 加载中...
  .infiniteText(v-if="noMore") 没有更多了

数据

  data() {
    return {
      warnList1: [[
       {
         id: 35147001, 
         event_begin_time: "2023-04-24", 
         monitoring_lane: "寿昌江二桥西侧车道", 
         event_reason: "是多少1", 
         event_desc: "处理过程1", 
         event_status: 2, 
         serial_number: 1, 
         status_name: "已完成"
       }
      ]],
      disabled: false,
      loading: false,
      noMore: false,
      pageForm: { //页码
        page: 0,
        pageSize: 20
      },
    }
  },

方法

  methods: {
    load1 () {
      this.loading = true
      this.disabled = true
      this.pageForm.page++
      this.getWarnListData1()
    },
    async getWarnListData1 () { // 事件跟进
      let params = { is_add: 1,...this.pageForm1 }
      let res = await this.$api.bridge_Bridge_warnList(params)
      let arr = res.result || []
      if(arr && arr.length < 10) {
        this.disabled = true
        this.noMore = true
      }else {
        this.disabled = false
        this.noMore = false
      }
      this.warnList1 = [...this.warnList1,...arr]
      this.loading = false
    },
  },
### Element UI v-loading 指令加载动画显示位置的设置 在使用 `v-loading` 指令时,可以通过调整其配置项来实现对加载动画显示位置的精确控制。以下是几种常见的方法: #### 方法一:通过 `target` 属性指定作用范围 如果希望加载动画仅覆盖某个特定区域而不是整个页面,可以利用 `this.$loading()` 的 `target` 参数[^3]。该参数允许开发者传入选定 DOM 元素的选择器,从而让加载动画只出现在目标区域内。 例如,在 Vue 组件中调用 `$loading` 并设定 `target`: ```javascript const loading = this.$loading({ lock: true, text: '加载...', spinner: 'el-icon-loading', background: 'rgba(0, 0, 0, 0.7)', target: document.querySelector('#specificArea') // 设置具体的目标容器 }); ``` 此方式适用于局部加载场景,比如表格或卡片组件内部。 --- #### 方法二:自定义样式使加载框固定定位 对于全局加载或者需要保持加载动画始终位于视口中心的情况,则需借助 CSS 定位技术。默认情况下,`v-loading` 是基于相对父级元素布局的;但如果页面存在滚动条,可能会导致加载图标的偏移现象[^5]。 解决方案是在初始化 Loading 实例时增加额外的样式规则,强制将其设为绝对定位并锁定到屏幕中央: ```css .loading-mask { position: fixed !important; top: 50% !important; left: 50% !important; transform: translate(-50%, -50%) !important; } ``` 上述代码片段可通过 `customClass` 配置传递至实例创建函数内: ```javascript const loading = this.$loading({ lock: true, text: '加载...', spinner: 'el-icon-loading', background: 'rgba(0, 0, 0, 0.7)', customClass: 'fixed-center' }); ``` 其中 `.fixed-center` 类对应前面提到的手动定义好的 CSS 样式表。 --- #### 方法三:动态监听窗口尺寸变化更新位置 某些复杂业务逻辑下可能还需要实时响应浏览器大小改变事件以重新计算最佳展示坐标。此时可结合 JavaScript EventListener 来完成此项操作: ```javascript let resizeHandler = () => { if (loading) { loading.close(); // 关闭原有实例以防重复叠加 initLoading(); // 初始化新的实例 } }; window.addEventListener('resize', debounce(resizeHandler, 200)); function initLoading() { const loading = this.$loading({ lock: true, text: '加载...', spinner: 'el-icon-loading', background: 'rgba(0, 0, 0, 0.7)', customClass: 'fixed-center' }); } // 使用防抖优化性能 function debounce(func, wait) { let timeout; return function(...args) { clearTimeout(timeout); timeout = setTimeout(() => func.apply(this, args), wait); }; } ``` 以上脚本确保即使用户频繁拖拽边框调整窗口比例也能维持良好的用户体验。 --- ### 总结 综上所述,Element Plus 或者 Element UI 提供了灵活多样的手段去定制化 `v-loading` 表现形式及其行为模式。无论是针对单个模块还是整页应用都提供了相应的工具支持。实际开发过程中应根据具体情况选择最合适的方案实施部署。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值