051_InfiniteScroll无限滚动

1. InfiniteScroll无限滚动

1.1. InfiniteScroll无限滚动滚动至底部时, 加载更多数据。

1.2. Attributes

参数

说明

类型

默认值

infinite-scroll-disabled

是否禁用

boolean

false

infinite-scroll-delay

节流时延, 单位为ms

number

200

infinite-scroll-distance

触发加载的距离阈值, 单位为px

number

0

infinite-scroll-immediate

是否立即执行加载方法, 以防初始状态下内容无法撑满容器。

boolean

true

2. InfiniteScroll无限滚动例子

2.1. 使用脚手架新建一个名为element-ui-infinitescroll折叠面板的前端项目, 同时安装Element插件。

2.2. 编辑index.js 

import Vue from 'vue'
import VueRouter from 'vue-router'
import InfiniteScroll from '../components/InfiniteScroll.vue'
import DisabledInfiniteScroll from '../components/DisabledInfiniteScroll.vue'

Vue.use(VueRouter)

const routes = [
  { path: '/', redirect: '/InfiniteScroll' },
  { path: '/InfiniteScroll', component: InfiniteScroll },
  { path: '/DisabledInfiniteScroll', component: DisabledInfiniteScroll }
]

const router = new VueRouter({
  routes
})

export default router

2.3. 在components下创建InfiniteScroll.vue

<template>
  <div>
    <h1>基础用法</h1>
    <h4>在要实现滚动加载的列表上上添加v-infinite-scroll, 并赋值相应的加载方法, 可实现滚动到底部时自动执行加载方法。</h4>
    <div class="content">
      <ul class="infinite-list" v-infinite-scroll="load" style="overflow: auto;">
        <li v-for="i in count" class="infinite-list-item" :key="i">{{ i }}</li>
      </ul>
    </div>
  </div>
</template>

<script>
export default {
  data () {
    return {
      count: 0
    }
  },
  methods: {
    load () {
      this.count += 2
    }
  }
}
</script>

<style scoped>
  .content {
    width: 800px;
    height: 500px;
    overflow: auto;
    text-align: center;
  }
  .content .infinite-list {
    list-style: none;
    margin: 0;
    padding: 0;
  }
  .infinite-list .infinite-list-item {
    width: 100%;
    height: 50px;
    background-color: #67C23A;
  }
  .infinite-list-item + .infinite-list-item {
    margin-top: 20px;
  }
</style>

2.4. 在components下创建DisabledInfiniteScroll.vue

<template>
  <div>
    <h1>禁用加载</h1>
    <div class="content" style="overflow: auto;">
      <ul class="infinite-list" v-infinite-scroll="load" infinite-scroll-disabled="disabled">
        <li v-for="i in count" class="infinite-list-item" :key="i">{{ i }}</li>
      </ul>
      <p v-if="loading">加载中...</p>
      <p v-if="noMore">没有更多了</p>
    </div>
  </div>
</template>

<style scoped>
  .content {
    width: 800px;
    height: 500px;
    overflow: auto;
    text-align: center;
  }
  .content .infinite-list {
    list-style: none;
    margin: 0;
    padding: 0;
  }
  .infinite-list .infinite-list-item {
    width: 100%;
    height: 50px;
    background-color: #FFE5E5;
  }
  .infinite-list-item + .infinite-list-item {
    margin-top: 20px;
  }
</style>

<script>
export default {
  data () {
    return {
      count: 10,
      loading: false
    }
  },
  computed: {
    noMore () {
      return this.count >= 20
    },
    disabled () {
      return this.loading || this.noMore
    }
  },
  methods: {
    load () {
      this.loading = true
      setTimeout(() => {
        this.count += 2
        this.loading = false
      }, 2000)
    }
  }
}
</script>

2.5. 运行项目, 访问http://localhost:8080/#/InfiniteScroll

2.6. 运行项目, 访问http://localhost:8080/#/DisabledInfiniteScroll

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
在 Vue 中实现无限滚动可以使用 `InfiniteScroll` 插件。这个插件可以自动监听滚动事件,当滚动到底部时,会自动触发加载更多数据的方法。 首先,你需要在你的 Vue 项目中安装 `vue-infinite-scroll` 插件。可以使用以下命令进行安装: ``` npm install vue-infinite-scroll --save ``` 安装完成之后,在你的 Vue 组件中引入 `InfiniteScroll` 插件,并使用 `v-infinite-scroll` 指令实现无限滚动。 例如,在一个商品列表的组件中: ```html <template> <div class="product-list"> <div v-for="(product, index) in productList" :key="index">{{product.name}}</div> <div v-if="loading">加载中...</div> </div> </template> <script> import InfiniteScroll from 'vue-infinite-scroll' export default { name: 'ProductList', data() { return { productList: [], // 商品列表 pageNum: 1, // 当前页码 pageSize: 10, // 每页数量 loading: false, // 是否正在加载 } }, mounted() { // 初始化加载第一页数据 this.loadData() }, methods: { // 加载数据 loadData() { this.loading = true // 模拟异步请求数据 setTimeout(() => { // 获取数据 const data = this.getProducts(this.pageNum, this.pageSize) // 添加到商品列表中 this.productList = [...this.productList, ...data] // 加载完成 this.loading = false // 更新页码 this.pageNum++ }, 1000) }, // 获取商品数据 getProducts(pageNum, pageSize) { // 模拟请求数据 const productList = [] for (let i = 0; i < pageSize; i++) { const id = (pageNum - 1) * pageSize + i productList.push({ id, name: `商品${id}`, }) } return productList }, }, directives: { InfiniteScroll, }, } </script> ``` 上面的代码中,我们使用 `v-for` 指令渲染商品列表,并且使用 `v-if` 指令判断是否正在加载数据。 在 `mounted` 钩子函数中,我们首先加载第一页数据。 在 `loadData` 方法中,我们先将 `loading` 标记为 `true`,表示正在加载数据。然后使用 `setTimeout` 模拟异步请求数据,并在加载完成后将数据添加到 `productList` 中。最后将 `loading` 标记为 `false`,表示加载完成。同时,更新 `pageNum` 的值,以便下一次加载更多数据。 在组件中使用 `v-infinite-scroll` 指令,指定 `loadData` 方法。当滚动到底部时,`loadData` 方法会自动触发。 ```html <template> <div class="product-list" v-infinite-scroll="loadData"> <div v-for="(product, index) in productList" :key="index">{{product.name}}</div> <div v-if="loading">加载中...</div> </div> </template> ``` 这样,当用户滚动到页面底部时,就会自动加载更多数据。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值