vue项目如何实现列表无限加载

目录

一、应用场景

二、核心实现逻辑

三、实战(小兔鲜)

四、优化


一、应用场景

最常见的应用场景就是在淘宝,京东等购物网站,我们会发现在商品浏览页一直滑动到底部的时候,商品会一直出现,可以一直加载。那么如何实现这样的功能呢?其实很简单!接着往下看

二、核心实现逻辑

使用elementPlus提供的v-infinite-scroll指令来监听是否满足触底条件,满足加载条件的时候就让页数参数加1,然后去获取下一页数据,最后做一个新老数据的拼接渲染

https://element-plus.org/zh-CN/component/infinite-scroll.html,可以查阅官方文档去了解该指令具体实现

三、实战(小兔鲜)

1.在index.vue文件准备好商品列表

<div class="body" >
         <!-- 商品列表-->
          <GoodsItem v-for="good in goodList" :good="good" :key="good.id">
          </GoodsItem>
 </div>

2.根据官方文档实例,去补充代码

首先在class="body"后面绑定v-infinite-scroll="load"指令 :

 <div class="body" v-infinite-scroll="load" >
         <!-- 商品列表-->
          <GoodsItem v-for="good in goodList" :good="good" :key="good.id">
          </GoodsItem>
 </div>

 然后在<script></script>中补充load方法:

const load = async()=>{
  // 测试
  console.log("..........加载更多选项.........")
 
}

测试看结果:当页面滑动到底部,就会consle这么一句话

 

测试通过后,继续在load方法内部写逻辑:

const load = async()=>{
  // 测试
  console.log("..........加载更多选项.........")
  // 获取下一页数据
  reqData.value.page++
  // 新老数据做一个拼接,现获取老数据res,在获取新数据,然后拼接数组
  const res = await getSubCategoryAPI(reqData.value)
  // 拼接数组,使用展开运算符...
  goodList.value = [...goodList.value , ...res.result.items]
 
}

 然后测试一下,发现列表可以不断加载,切换到Network看,我们发现右侧的page从原来的1变成了14,说明我们不断获取到下一页的数据了,并且完成了新老数据的拼接渲染!

最后我们来设置监听来停止加载,补充disabled方法

利用 :infinite-scroll-disabled="disabled"来禁用加载

<div class="body" v-infinite-scroll="load" :infinite-scroll-disabled="disabled">
         <!-- 商品列表-->
          <GoodsItem v-for="good in goodList" :good="good" :key="good.id">
          </GoodsItem>
 </div>

 完整代码

// 无限加载方法
const disabled = ref(false)
const load = async()=>{
  // 测试
  console.log("..........加载更多选项.........")
  // 获取下一页数据
  reqData.value.page++
  // 新老数据做一个拼接,现获取老数据res,在获取新数据,然后拼接数组
  const res = await getSubCategoryAPI(reqData.value)
  // 拼接数组,使用展开运算符...
  goodList.value = [...goodList.value , ...res.result.items]
  // 加载完毕,判断条件是数据长度为0
  if (res.result.items.length === 0){
    disabled.value=true
  }
}

通过测试,可以发现列表全部加载完毕的时候, 就会停止加载

四、优化

通过上面的列子我们可以发现,在滚动到页面下方的时候,切换回首页,滚动条还是在页面下方,而不会自己回到页面顶部,这个时候我们可以做一个页面优化,让滚动条回到页面顶部,回到最开始的地方(定制路由)。

定制路由行为:在不同路由切换的时候,可以自动滚动到页面的顶部,而不是停留在原先的位置。vue-router支持scrollBehavior配置项,可以指定路由切换时的滚动位置

 scrollBehavior(){
        return{
            top:0
        }
 }

在router文件夹的index.js文件补充以下代码,配置路由行为,跟routers是同级的

  • 6
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: Vue图片列表实现轮播的步骤如下: 1. 首先,在Vue的模板中,创建一个div容器,用于显示轮播图。可以设置容器的宽度和高度,根据需要进行调整。 2. 在Vue的data中定义一个数组,用于存储轮播图的图片地址。可以在数组中添加多个图片地址,以实现多张图片的轮播。 3. 在Vue的methods中,编写一个方法,用于切换图片。可以使用Vue的响应式数据来实现切换图片的效果。在该方法中,通过改变存储图片地址的数组的索引值来切换图片。 4. 可以在Vue的mounted钩子函数中,调用切换图片的方法,并使用定时器,设置时间间隔,实现图片的自动切换。 5. 在Vue的模板中,使用v-for指令遍历图片数组,将每张图片显示在div容器中。可以使用img标签来显示图片,通过设置图片的src属性来指定图片地址。 6. 可以为轮播图添加前后切换按钮,实现手动切换图片的功能。在Vue的methods中编写前后切换图片的方法,并在模板中绑定到按钮上,通过点击按钮来切换图片。 以上就是使用Vue实现图片列表轮播的简单步骤。具体的实现可以根据项目需求进行调整和扩展。 ### 回答2: Vue的图片列表实现轮播可以通过以下几个步骤来实现: 1. 首先,我们需要创建一个Vue实例作为整个应用的入口点,可以在HTML文件中引入Vue库,并在script标签中创建Vue实例。 2. 在Vue实例的data选项中定义一个数组来存储需要展示的图片列表,每个图片对象包含图片的URL以及其他相关属性。 3. 在HTML模板中使用v-for指令来循环遍历图片数组,创建多个图片的DOM元素。 4. 使用CSS样式设置图片的布局和样式,并使用v-bind指令将图片的URL绑定到对应的img标签的src属性上。 5. 使用Vue的computed属性来计算当前图片的索引值,并设置一个定时器来定时改变当前图片的索引,从而实现轮播效果。 6. 在计算属性中使用三元表达式来判断当前图片的索引是否超出图片数组的边界,如果超出,则将索引重置为0。 7. 在HTML模板中使用v-bind:class指令来动态设置当前图片的样式,可以在CSS中定义一个active类来添加特殊样式。 8. 在Vue实例的mounted生命周期钩子中启动定时器,以便在Vue实例加载完成后立即开始轮播。 通过以上步骤,我们可以实现一个简单的图片列表轮播效果,当页面加载完毕时,图片会自动进行轮播,展示不同的图片。可以根据需求调整图片切换的速度、动画效果等。 ### 回答3: 在Vue实现图片列表的轮播可以通过以下步骤进行: 1. 在Vue组件中引入所需的图片列表数据,可以通过使用数组或对象的形式进行存储,每个元素包括图片的路径、标题等信息。 2. 创建一个Vue的数据属性来存储当前轮播图片的索引值,例如`currentIndex`,初始化为0。 3. 在Vue模板中,使用v-for指令遍历图片列表数据,将每个图片以适当的方式展示在页面中。 4. 使用CSS样式设置图片外部容器的宽度和高度,并将样式的overflow属性设置为隐藏,以确保只显示容器内的一张图片。 5. 使用Vue的计算属性,根据`currentIndex`值获取当前展示的图片信息。 6. 使用Vue的定时器方法,例如`setInterval`,在指定的时间间隔内更新`currentIndex`的值,以实现图片的自动轮播效果。 7. 在Vue模板中,使用绑定事件的方式为左右箭头按钮设置点击事件,通过改变`currentIndex`的值来切换上一张或下一张图片。 8. 可以根据需求,为轮播图添加一些过渡效果,例如淡入淡出或滑动效果,使用Vue的过渡动画组件来实现。 9. 如果希望实现无限循环的轮播效果,可以在图片列表的首尾分别添加与最后一张和第一张图片相同的内容,并在切换到首尾图片时,通过动画效果实现无缝切换。 通过上述步骤,可以在Vue实现一个简单的图片列表轮播效果。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值