vue循环渲染动态展示内容案例(“更多”按钮功能)
当我们在网页浏览时,常常会有以下情况:要展示的内容太多,但展示空间有限,比如我们要在页面的一部分空间中展示较多的内容放不下,通常会有两种解决方式:分页,“更多”按钮。
今天我们的案例用于更多按钮的功能实现。
比如我们要展示这样的效果:

红框框是我们要展示的内容,当我们点击更多时,就会依次排列更多的红色框框。
比如我们有这样一些内容要展示:
const newCourseList = ref([{id:"1",name:"英特尔实时计算中级课程",type:"",videoNum:"10",studyNum:"5946",imgUrl:"src/assets/images/newcourse/newcourse1.png"},{id:"2",name:"英特尔实时计算初级课程",type:"",videoNum:"10",studyNum:"6682",imgUrl:"src/assets/images/newcourse/newcourse2.png"},{id:"3",name:"OpenCV高级认证课程",type:"",videoNum:"10",studyNum:"8963",imgUrl:"src/assets/images/newcourse/newcourse3.jpg"},{id:"4",name:"OpenCV初级认证课程",type:"",videoNum:"10",studyNum:"5869",imgUrl:"src/assets/images/newcourse/newcourse4.jpg"},{id:"5",name:"英特尔® OpenVINO™工具套件初级课程——2024焕新版",type:"",videoNum:"10",studyNum:"5869",imgUrl:"src/assets/images/newcourse/newcourse5.jpg"},{id:"6",name:"英特尔® OpenVINO™工具套件中级课程",type:"",videoNum:"10",studyNum:"5869",imgUrl:"src/assets/images/newcourse/newcourse6.png"},{id:"7",name:"英特尔® OpenVINO™工具套件高级课程",type:"",videoNum:"10",studyNum:"5869",imgUrl:"src/assets/images/newcourse/newcourse7.jpg"},{id:"8",name:"英特尔® Smart Edge Open初级认证课程",type:"",videoNum:"10",studyNum:"5869",imgUrl:"src/assets/images/newcourse/newcourse8.png"},{id:"9",name:"1",type:"",videoNum:"10",studyNum:"5869",imgUrl:"src/assets/images/newcourse/newcourse8.png"},{id:"10",name:"2",type:"",videoNum:"10",studyNum:"5869",imgUrl:"src/assets/images/newcourse/newcourse8.png"},{id:"11",name:"3",type:"",videoNum:"10",studyNum:"5869",imgUrl:"src/assets/images/newcourse/newcourse8.png"},{id:"12",name:"4",type:"",videoNum:"10",studyNum:"5869",imgUrl:"src/assets/images/newcourse/newcourse8.png"},{id:"13",name:"5",type:"",videoNum:"10",studyNum:"5869",imgUrl:"src/assets/images/newcourse/newcourse8.png"},{id:"14",name:"6",type:"",videoNum:"10",studyNum:"5869",imgUrl:"src/assets/images/newcourse/newcourse8.png"},{id:"15",name:"7",type:"",videoNum:"10",studyNum:"5869",imgUrl:"src/assets/images/newcourse/newcourse8.png"},{id:"16",name:"8",type:"",videoNum:"10",studyNum:"5869",imgUrl:"src/assets/images/newcourse/newcourse8.png"},
])
一共16条数据,但是我们最初始要展示七条数据,当单击一次更多按钮要展示13条数据。也就是每次单击都再展示6条数据。
首先我们要对布局分析,我们可以将整个布局看成一行,左边第一个元素独占一列。右边的其他元素可以占整体一个列,然后再分行分列。这里我们用到elementui中的格子模式,每行占24个格子。整体看,每行有4个元素。比如第一个元素我们给6个格子。那么其他位置我们需要每行展示3个元素,后边自己分一行就又是24个格子,三个元素,每个元素8个格子。
我们要确定,前七条数据先怎么展示出来,这里有个问题就是第一个框框的大小跟其他的不一样,而且第一个一直就是那唯一的一个,所以我们就不将第一个元素写在循环渲染内,除了第一个,其他都用循环写。
那么第一个元素我们可以这样写:
<el-row :span="24" style="width: 1240px;margin: 0px auto;" :gutter="15"><el-col :span="6"> <div style="height: 530px;width: 100%;background-color: #fff;border-radius: 5px;margin-bottom:10px;"><RouterLink :to="`/course/coursecontent/${newCourseList[0].id}`"><img style="width: 100%;height: 400px;border-radius: 5px 5px 0px 0px;" v-img-lazy="newCourseList[0].imgUrl" alt="" /><div><div style="padding: 20px; font-size: 16px;font-family: PingFangSC-Regular, sans-serif;text-overflow: ellipsis;white-space: nowrap;overflow: hidden;">{{ newCourseList[0].name }}</div><div style="font-size: 12px;margin-left: 20px;" ><el-icon size="20" style="position:relative;top:5px;margin: 0 5px 0 0px"><VideoCamera/></el-icon><span>{{newCourseList[0].videoNum}}</span></div></div></RouterLink></div></el-col>
<el-row>
说明:el-row是elementui中的行元素代表一个行,el-col代表一个列,:span后面是代表这个行/列占得格子数。
newCourseList的第一个元素也就是newCourseList[0],打点调用每条数据中的内容。上述代码就将第一个元素展示出来了。
其他元素我们就需要用到循环渲染了
因为第一个元素占了6个格子,后面其他元素一起占一列,那就是18个格子。内部再分行,那么每行又是24个格子,所以一个元素是8个格子。
<el-col :span="18"><el-row :span="24"><el-col :span="8" v-for="course in newCourseList" :key="course.id"><div style="height: 256px;width: 100%;background-color: #fff;border-radius: 5px;margin-bottom:10px;"><RouterLink :to="`/course/coursecontent/${course.id}`"><img style="width: 100%;height: 160px;border-radius: 5px 5px 0px 0px;" v-img-lazy="course.imgUrl" alt="" /><div><div style="padding: 20px; font-size: 16px;font-family: PingFangSC-Regular, sans-serif;text-overflow: ellipsis;white-space: nowrap;overflow: hidden;">{{ course.name }}</div><div style="font-size: 12px;margin-left: 20px;" ><el-icon size="20" style="position:relative;top:5px;margin: 0 5px 0 0px"><VideoCamera/></el-icon><span>{{course.videoNum}}</span></div></div></RouterLink></div></el-col></el-row></el-col>
我们在内部列中使用了循环渲染,这样实现了显示的功能,但是有个问题:这样写右侧不会只显示6个元素,而是将所有数据展示出来。
为了解决这个问题我们可以建立一个新对象,来装我们要展示的六条数据,然后去循环展示这个新对象,注意:循环时是从第二条数据开始的,因为第一条数据不参与循环。
创建对象:
const listCopy=ref(newCourseList.value.slice(1,7))
上述代码我们创建了一个对象listCopy,初始值用来装newCourseList的下标值为1-6的数据。
修改后的代码:
<el-col :span="18"><el-row :span="24"><el-col :span="8" v-for="course in listCopy" :key="course.id"><div style="height: 256px;width: 100%;background-color: #fff;border-radius: 5px;margin-bottom:10px;"><RouterLink :to="`/course/coursecontent/${course.id}`"><img style="width: 100%;height: 160px;border-radius: 5px 5px 0px 0px;" v-img-lazy="course.imgUrl" alt="" /><div><div style="padding: 20px; font-size: 16px;font-family: PingFangSC-Regular, sans-serif;text-overflow: ellipsis;white-space: nowrap;overflow: hidden;">{{ course.name }}</div><div style="font-size: 12px;margin-left: 20px;" ><el-icon size="20" style="position:relative;top:5px;margin: 0 5px 0 0px"><VideoCamera/></el-icon><span>{{course.videoNum}}</span></div></div></RouterLink></div></el-col></el-row></el-col>
接下来又有一个问题,就是怎么在单击“更多”时,多展示六条数据。
我们可以为“更多”设置一个单击事件,然后触发一个函数修改被循环的对象:listCopy的值。
<el-row style="background-color:#f6f8fb; height: 150px;" justify="center" align="middle" type="flex"><div style="width:200px;background: transparent;border: 1px solid #999;color: #999;text-align: center;font-size: 12px;padding: 18px 75px;border-radius: 4px;" @click="changeList()">更多竞赛</div></el-row>
我设置了名为changeList的函数。
接下来我们需要考虑两种情况:
1、剩余数据大于6条,2、剩余数据不足6条
第一种情况,我们需要控制listCopy的数据只增加6条。
第二种情况,剩余几条增加几条就可以。
函数内部代码:
const changeList=()=>{let count=listCopy.value.length+1;let maxCount=newCourseList.value.length-1;let sub=maxCount-count>6?6:maxCount-count;for(let i=0;i<sub;i++){listCopy.value.push(newCourseList.value[count+i])}}
说明:count变量用来装我们需要从newCourseList的哪个下标值开始增加给listCopy。maxCount用来装剩余数据的最大下标值。sub用来装我们要追加几条数据:如果大于6,sub就是6,如果不大于6就是剩余数据的最大下标值减去从哪个下标值开始,也就是还剩几条。
for循环就是对listCopy对象的数值进行追加。
例如第一次:count的值为7,也就是从id为8的数据开始追加给listCopy。maxCount值为15,一共16条,最大下标值为15。sub值为6,因为maxCount-count=15-7=8,8>6所以sub的值为6。那么for循环将执行6次。第一次向listCopy中push:newCourseList下标值为7的数据,第二次是newCourseList下标值为8的数据。
这样我们就实现了最初的功能。
页面效果:
单击一次:

单击两次:

相关文章:
vue循环渲染动态展示内容案例(“更多”按钮功能)
当我们在网页浏览时,常常会有以下情况:要展示的内容太多,但展示空间有限,比如我们要在页面的一部分空间中展示较多的内容放不下,通常会有两种解决方式:分页,“更多”按钮。 今天我们的案例用于…...
好用的工具网址
代码类: 1,json解析:JSON在线解析及格式化验证 - JSON.cn 2.传参转化编码 在线url网址编码、解码器-BeJSON.com 日常: 1.莆田医院查询:滚蛋吧!莆田系...
【Temporal】方法规范
在workflow或者childWorkflow的方法代码中,不能使用golang的一些库方法,比如sleep,go协程等,必须使用其对应的封装方法,比如对应关系如下: time.Sleep -> workflow.Sleepgo xx -> workflow.Go(xx) 这…...
Python实现图形学曲线和曲面的Bezier曲线算法
目录 使用Python实现图形学曲线和曲面的Bezier曲线算法引言Bezier曲线的数学原理1. Bezier曲线定义2. Bezier曲线的递归形式 Python实现Bezier曲线算法1. 代码实现 代码详解使用示例Bezier曲线的特点Bezier曲面的扩展Bezier曲面类实现 总结 使用Python实现图形学曲线和曲面的Be…...
Unity数据持久化4——2进制
概述 基础知识 各类型数据转字节数据 文件操作相关 文件相关 文件流相关 文件夹相关 练习题 using System; using System.Collections; using System.Collections.Generic; using System.IO; using System.Text; using UnityEngine;public class Exercises1 : MonoBehaviour {/…...
经典sql题(八)SQL 查询详细指南总结一
SQL 查询详细指南 SQL(Structured Query Language)是一种用于管理和操作关系数据库的标准语言。本文将详细介绍 SQL 中的一些常见操作及其用法,包括 DISTINCT 去重、LIMIT 限制、排序、开窗函数、NULL 值替换、JOIN 与 UNION 等。 1. DISTI…...
用Python实现时间序列模型实战——Day 30: 学习总结与未来规划
在第30天,我们将对整个学习过程进行总结,复习关键知识点,并展望未来的学习与应用方向。我们将涵盖时间序列分析过程中涉及的主要模型、技术和工具,总结它们的优势和应用场景。此外,规划未来如何进一步深入学习…...
ChatGPT居然主动勾引用户,OpenAI又测试新功能? 一文教你学会订阅
有网友表示,他收到了ChatGPT主动给他发送的消息,询问“你高中的第一周过得怎么样?还适应吗?” 他很懵逼的回了一句“你刚才是给我发消息吗?”。也就是说,在没有任何先前文本提示下,ChatGPT主动…...
基于SpringBoot+Vue的考研百科网站系统
作者:计算机学姐 开发技术:SpringBoot、SSM、Vue、MySQL、JSP、ElementUI、Python、小程序等,“文末源码”。 专栏推荐:前后端分离项目源码、SpringBoot项目源码、SSM项目源码 精品专栏:Java精选实战项目源码、Python精…...
深度之眼(三十)——pytorch(一)--深入浅出pytorch(附安装流程)
文章目录 一、前言一、pytoch二、六个部分三、如何学习四、学习路径(重要)五、安装pytorch5.1 坑15.2 坑2 一、前言 我看了下目录 第一章和第二章都是本科学的数字图像处理。 也就是这一专栏:数字图像实验。 所以就不准备学习前两章了,直接…...
麒麟银河桌面版,成功安装cuda12.6,mysql
一、 要卸载并禁用 nouveau 驱动程序,可以按照以下步骤进行: 1. 确认 nouveau 驱动的当前状态: 首先,你可以使用以下命令查看 nouveau 驱动是否正在运行: lsmod | grep nouveau如果有输出,说明 nouveau …...
CentOS 7 YUM源不可用
CentOS 7 操作系统在2024年6月30日后将停止官方维护,并且官方提供的YUM源将不再可用。 修改:nano /etc/yum.repos.d/CentOS-Base.repo # CentOS-Base.repo [base] nameCentOS-$releasever - Base baseurlhttp://mirrors.aliyun.com/centos/$rel…...
Java反序列化利用链篇 | URLDNS链
文章目录 URLDNS链调用链分析Payload编写 系列篇其他文章,推荐顺序观看~ Java反序列化利用链篇 | JdbcRowSetImpl利用链分析Java反序列化利用链篇 | CC1链_全网最菜的分析思路Java反序列化利用链篇 | CC1链的第二种方式-LazyMap版调用链Java反序列化利用链篇 | URLD…...
Android 短信验证码自动填充
本文主要介绍国外google上线的app 短信自动填充方案。 本方案主要是使用google提出的,防止开发者使用SMS相关权限造成的用户信息泄露 目录 注意点: 1、本方式不适合华为手机,华为有自己的获取方式 2、本方式不需要添加任何短信权限 3、…...
数据库 MySQL 是否需要容器化?
容器的定义:容器是为了解决“在切换运行环境时,如何保证软件能够正常运行”这一问题。 目前,容器和 Docker 依旧是技术领域最热门的词语,无状态的服务容器化已经是大势所趋,同时也带来了一个热点问题被大家所争论不以…...
Kettle的安装及简单使用
Kettle的安装及简单使用一、kettle概述二、kettle安装部署和使用Windows下安装案例1:MySQL to MySQL案例2:使用作业执行上述转换,并且额外在表stu2中添加一条数据案例3:将hive表的数据输出到hdfs案例4:读取hdfs文件并将…...
Golang | Leetcode Golang题解之第420题强密码检验器
题目: 题解: func strongPasswordChecker(password string) int {hasLower, hasUpper, hasDigit : 0, 0, 0for _, ch : range password {if unicode.IsLower(ch) {hasLower 1} else if unicode.IsUpper(ch) {hasUpper 1} else if unicode.IsDigit(ch)…...
面试金典题3
URL化。编写一种方法,将字符串中的空格全部替换为%20。假定该字符串尾部有足够的空间存放新增字符,并且知道字符串的“真实”长度。 示例 1: 输入:"Mr John Smith ", 13 输出:"Mr%20John%20Smith&…...
FFmpeg开发笔记(五十六)使用Media3的Exoplayer播放网络视频
Android早期的MediaPlayer控件对于网络视频的兼容性很差,所以后来单独推出了Exoplayer库增强支持网络视频,在《Android Studio开发实战:从零基础到App上线(第3版)》一书第14章的“14.3.3 新型播放器ExoPlayer”就详细介绍了Exoplayer库的详细…...
Python使用总结之py-docx将word文件中的图片保存,并将内容返回
Python使用总结之py-docx将word文件中的图片保存,并将内容返回 使用py-docx读取word文档的内容,其中包含标题、文本和图片等信息。该方法将标题和内容返回,并将文件中的图片保存到指定的文件夹中。 实现步骤 加载文件内容读取文件的段落对文…...
vue3 字体颜色设置的多种方式
在Vue 3中设置字体颜色可以通过多种方式实现,这取决于你是想在组件内部直接设置,还是在CSS/SCSS/LESS等样式文件中定义。以下是几种常见的方法: 1. 内联样式 你可以直接在模板中使用style绑定来设置字体颜色。 <template><div :s…...
【Java_EE】Spring MVC
目录 Spring Web MVC 编辑注解 RestController RequestMapping RequestParam RequestParam RequestBody PathVariable RequestPart 参数传递 注意事项 编辑参数重命名 RequestParam 编辑编辑传递集合 RequestParam 传递JSON数据 编辑RequestBody …...
深度学习习题2
1.如果增加神经网络的宽度,精确度会增加到一个特定阈值后,便开始降低。造成这一现象的可能原因是什么? A、即使增加卷积核的数量,只有少部分的核会被用作预测 B、当卷积核数量增加时,神经网络的预测能力会降低 C、当卷…...
论文笔记——相干体技术在裂缝预测中的应用研究
目录 相关地震知识补充地震数据的认识地震几何属性 相干体算法定义基本原理第一代相干体技术:基于互相关的相干体技术(Correlation)第二代相干体技术:基于相似的相干体技术(Semblance)基于多道相似的相干体…...
【电力电子】基于STM32F103C8T6单片机双极性SPWM逆变(硬件篇)
本项目是基于 STM32F103C8T6 微控制器的 SPWM(正弦脉宽调制)电源模块,能够生成可调频率和幅值的正弦波交流电源输出。该项目适用于逆变器、UPS电源、变频器等应用场景。 供电电源 输入电压采集 上图为本设计的电源电路,图中 D1 为二极管, 其目的是防止正负极电源反接, …...
力扣热题100 k个一组反转链表题解
题目: 代码: func reverseKGroup(head *ListNode, k int) *ListNode {cur : headfor i : 0; i < k; i {if cur nil {return head}cur cur.Next}newHead : reverse(head, cur)head.Next reverseKGroup(cur, k)return newHead }func reverse(start, end *ListNode) *ListN…...
离线语音识别方案分析
随着人工智能技术的不断发展,语音识别技术也得到了广泛的应用,从智能家居到车载系统,语音识别正在改变我们与设备的交互方式。尤其是离线语音识别,由于其在没有网络连接的情况下仍然能提供稳定、准确的语音处理能力,广…...
echarts使用graphic强行给图增加一个边框(边框根据自己的图形大小设置)- 适用于无法使用dom的样式
pdf-lib https://blog.csdn.net/Shi_haoliu/article/details/148157624?spm1001.2014.3001.5501 为了完成在pdf中导出echarts图,如果边框加在dom上面,pdf-lib导出svg的时候并不会导出边框,所以只能在echarts图上面加边框 grid的边框是在图里…...
CSS 工具对比:UnoCSS vs Tailwind CSS,谁是你的菜?
在现代前端开发中,Utility-First (功能优先) CSS 框架已经成为主流。其中,Tailwind CSS 无疑是市场的领导者和标杆。然而,一个名为 UnoCSS 的新星正以其惊人的性能和极致的灵活性迅速崛起。 这篇文章将深入探讨这两款工具的核心理念、技术差…...
基于Python的气象数据分析及可视化研究
目录 一.🦁前言二.🦁开源代码与组件使用情况说明三.🦁核心功能1. ✅算法设计2. ✅PyEcharts库3. ✅Flask框架4. ✅爬虫5. ✅部署项目 四.🦁演示效果1. 管理员模块1.1 用户管理 2. 用户模块2.1 登录系统2.2 查看实时数据2.3 查看天…...
