0

0

vue实现列表上下循环滚动

PHPz

PHPz

发布时间:2023-05-25 11:24:07

|

2544人浏览过

|

来源于php中文网

原创

作为一名前端开发者,我们往往需要实现列表的上下滚动,但如果使用原生的滚动条,用户体验常常很不理想。因此,本文将介绍如何借助 vue.js 实现列表的上下循环滚动效果,以提升用户体验。

实现思路

实现上下循环滚动的核心思路是在列表的首尾之间添加一定量的重复数据,这样当用户滚动到列表的顶部或者底部时,我们将会让滚动实际上是从另一端的重复数据开始的。这样就能够实现上下循环滚动的效果。

但是,如果直接将重复数据直接添加到原本的数据源中,会导致无法正常地显示原始数据。因此,我们需要借助计算属性来实现这一目标,以保持原始数据的完整性。

实现过程

在Vue.js中实现上下循环滚动的过程可以分为以下几个步骤:

  1. 给列表添加一个外部容器

为了实现滚动效果,我们首先需要添加一个容器元素,并将列表放置在其中。同时,我们还需要设置容器的高度和 overflow 属性,以便用户可以滚动列表。

立即学习前端免费学习笔记(深入)”;

Angular组件库
Angular组件库

本组件封装了Angular1.0版本,组件实现了以下功能: 路由,子路由,轮播,cookie读写,加密,表单提交验证,拦截器,白名单,搜索过滤与排序(等级划分), 大小写转换,Map数组循环遍历动态修改后台数据等功能。

下载
  • {{ item.text }}
  1. 定义数据源和计算属性

接下来,我们需要定义数据源和计算属性,这里我们以一个数组 list 为数据源,以 displayList 为计算属性。在计算属性中,我们会通过 cloneList 方法将数据源克隆一份,并将克隆的数据源首尾相接,并添加重复数据。

data() {
  return {
    list: [
      { id: 1, text: 'item 1' },
      { id: 2, text: 'item 2' },
      ...
      { id: 20, text: 'item 20' }
    ]
  }
},
computed: {
  displayList() {
    const cloneList = [...this.list, ...this.list, ...this.list];
    const top = this.scrollTop % this.itemHeight;
    const startIndex = Math.floor(this.scrollTop / this.itemHeight) % this.list.length;
    const endIndex = startIndex + Math.ceil(this.listHeight / this.itemHeight);

    return cloneList.slice(startIndex, endIndex + 1);
  }
},
  1. 绑定滚动事件

为了根据用户的滚动动作来更新列表的显示内容,我们需要监听列表容器的 scroll 事件,通过计算被滚动的距离,更新 displayList 的计算属性。

mounted() {
  const listContainer = document.querySelector('.list-container');
  listContainer.addEventListener('scroll', this.handleScroll);
},
methods: {
  handleScroll() {
    const listContainer = document.querySelector('.list-container');
    this.scrollTop = listContainer.scrollTop;
  }
},
  1. 计算滚动相关的属性

在计算属性中,我们需要计算滚动条的位置和列表项的高度等属性,并在 displayList 的更新时重新计算。在本例中,我们通过 this.scrollTop 来保存容器当前被滚动的距离,通过 this.itemHeight 来保存每一个列表项的高度,通过 this.listHeight 来保存整个列表的高度。

data() {
  return {
    ...
    scrollTop: 0,
    itemHeight: 30,
    listHeight: this.list.length * this.itemHeight
  }
},
computed: {
  ...
  displayList() {
    ...
    this.listHeight = this.list.length * this.itemHeight;
    return cloneList.slice(startIndex, endIndex + 1);
  }
},

总结

通过以上的步骤,我们就可以实现基于 Vue.js 的列表上下循环滚动了。当用户滚动到列表的顶部或者底部时,我们会让滚动实际上是从另一端的重复数据开始的,从而实现上下循环滚动的效果。此外,我们使用了计算属性来保持原始数据的完整性,同时通过绑定滚动事件和计算滚动相关的属性,实现了自然流畅的滚动效果。

本站声明:本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn

相关专题

更多
高德地图升级方法汇总
高德地图升级方法汇总

本专题整合了高德地图升级相关教程,阅读专题下面的文章了解更多详细内容。

4

2026.01.16

全民K歌得高分教程大全
全民K歌得高分教程大全

本专题整合了全民K歌得高分技巧汇总,阅读专题下面的文章了解更多详细内容。

3

2026.01.16

C++ 单元测试与代码质量保障
C++ 单元测试与代码质量保障

本专题系统讲解 C++ 在单元测试与代码质量保障方面的实战方法,包括测试驱动开发理念、Google Test/Google Mock 的使用、测试用例设计、边界条件验证、持续集成中的自动化测试流程,以及常见代码质量问题的发现与修复。通过工程化示例,帮助开发者建立 可测试、可维护、高质量的 C++ 项目体系。

10

2026.01.16

java数据库连接教程大全
java数据库连接教程大全

本专题整合了java数据库连接相关教程,阅读专题下面的文章了解更多详细内容。

33

2026.01.15

Java音频处理教程汇总
Java音频处理教程汇总

本专题整合了java音频处理教程大全,阅读专题下面的文章了解更多详细内容。

15

2026.01.15

windows查看wifi密码教程大全
windows查看wifi密码教程大全

本专题整合了windows查看wifi密码教程大全,阅读专题下面的文章了解更多详细内容。

42

2026.01.15

浏览器缓存清理方法汇总
浏览器缓存清理方法汇总

本专题整合了浏览器缓存清理教程汇总,阅读专题下面的文章了解更多详细内容。

7

2026.01.15

ps图片相关教程汇总
ps图片相关教程汇总

本专题整合了ps图片设置相关教程合集,阅读专题下面的文章了解更多详细内容。

9

2026.01.15

ppt一键生成相关合集
ppt一键生成相关合集

本专题整合了ppt一键生成相关教程汇总,阅读专题下面的的文章了解更多详细内容。

6

2026.01.15

热门下载

更多
网站特效
/
网站源码
/
网站素材
/
前端模板

精品课程

更多
相关推荐
/
热门推荐
/
最新课程
关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送

Copyright 2014-2026 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号