[vue学习] 卡片展示分行功能简单实现

如图所示,实现简单的卡片展示分行功能。
分行功能较多地用于展示商品、相册等,本人在学习的过程中也是常常需要用到这个功能;虽然说现在有很多插件都能实现这个功能,但是自己写出来,能够理解原理,相信能够进步不少。
首先看看这个简单的原理分析:
最核心的就是多维数组,而且是不规则数组。将全部卡片全部分解为多维数组,页面渲染这个不规则多维数组,最终能达到这样的效果。
自己写一个商品列表goodsList,它里面的数据如下:
有9个商品,然后在前端渲染时将这十个商品分行,五个一行
goodsList: [
{
id: "1",
name: "1"
}, {
id: "2",
name: "2"
}, {
id: "3",
name: "3"
}, {
id: "4",
name: "4"
}, {
id: "5",
name: "5"
}, {
id: "6",
name: "6"
}, {
id: "7",
name: "7"
},{
id: "8",
name: "8"
},{
id: "9",
name: "9"
}
]
首先写一个方法:
getRow
声明一个数组并赋值为空,用于存储将多维数组。
let arr = [];确定行数,使用
Math.ceil方法向上取舍(如果有7个商品 ,一行 5 个,7 / 5 = 1.4,向上取舍得2行)let row = Math.ceil(this.goodsList.length / 5);因为我们没有理由让商品刚好放满每一行,有时候我们发现最后一行是不够5个商品,所以使用不规则数组。使用嵌套循环,将全部商品分割成多个长度上限为5的数组。第一层循环是行数循环,第二层循环是列循环
 getRow () {
         let arr = [];
         let row = Math.ceil(this.goodsList.length / 5);
         //  行循环
         for (let i = 0; i < row; i++) {
           //  第i行的商品
           arr[i] = [];
           // modLast:最后一行的商品个数
           let modLast = this.goodsList.length % 5 === 0 ? 5 : this.goodsList.length % 5;
           // lastRow:判断当前循环是不是最后一行,是就让内层循环最后一行的商品个数,不是则默认5个
           let lastRow = i === (row - 1) ? modLast : 5;
           //  列循环
           for (let j = 0; j < lastRow; j++) {
             arr[i][j] = this.goodsList[5 * i + j];
           }
         }
         //  最后得到arr数组,将数组赋值给一个变量
         this.branchData = arr;
 }
根据需求触发 getRow() 执行,我这里是通过
Vue生命周期中的mounted,当页面被挂载后执行函数。
 mounted () {
   this.getRow();
 }
最后将分割后的多维数组进行前端遍历渲染
<div class="row" v-for="rows in branchData">
<div class="card" v-for="cols in rows">
<div class="name">{{cols.name}}</div>
</div>
</div>
完
一个简单的分行功能在此实现!欢迎指正!谢谢。
附录:
前端代码:
<template>
<div class="branch">
<div class="row" v-for="rows in branchData">
<div class="card" v-for="cols in rows">
<div class="name">{{cols.name}}</div>
</div>
</div>
</div>
</template>
样式:
<style scoped>
.branch {
width: 800px;
margin: 0 auto;
}
.card {
height: 100px;
width: 100px;
margin: 15px;
background-color: turquoise;
display: flex;
justify-content: center;
align-items: center;
}
.row {
display: flex;
flex-direction: row;
}
</style>
JS:
<script>
export default {
name: "Branch",
data() {
return {
goodsList: [
{
id: "1",
name: "1"
}, {
id: "2",
name: "2"
}, {
id: "3",
name: "3"
}, {
id: "4",
name: "4"
}, {
id: "5",
name: "5"
}, {
id: "6",
name: "6"
}, {
id: "7",
name: "7"
},{
id: "8",
name: "8"
},{
id: "9",
name: "9"
}
],
branchData: []
}
},
mounted () {
this.getRow();
},
methods: {
getRow () {
let arr = [];
let row = Math.ceil(this.goodsList.length / 5);
for (let i = 0; i < row; i++) {
arr[i] = [];
let modLast = this.goodsList.length % 5 === 0 ? 5 : this.goodsList.length % 5;
let lastRow = i === (row - 1) ? modLast : 5;
for (let j = 0; j < lastRow; j++) {
arr[i][j] = this.goodsList[5 * i + j];
}
}
this.branchData = arr;
}
}
}
</script>
[vue学习] 卡片展示分行功能简单实现的更多相关文章
- vue学习笔记(二)——简单的介绍以及安装
		
学习编程需要的是 API+不断地练习^_^ Vue官网:https://cn.vuejs.org/ 菜鸟教程:http://www.runoob.com/vue2/vue-tutorial.html ...
 - Vue学习笔记(一)简单使用和插值操作
		
目录 一.Vue是什么 二.Vue简单体验 1. 声明式渲染 2. vue列表展示 3. 处理用户输入(事件监听) 三.插值操作 1. Mustache语法 2. 常用v-指令 v-once v-ht ...
 - Vue学习——使用vue-cli搭建一个简单的本地vue项目
		
前提 安装好node.js.npm.vue-cli.为什么要先安装这些,建议查看https://www.cnblogs.com/jixue/p/10673875.html,这个对于vue-cli理解很 ...
 - Vue学习之todolist删除功能
		
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8&quo ...
 - Vue学习(三)-Vue-router路由的简单使用
		
一.Vue-Router环境的安装: 如果使用vue-cli脚手架搭建,项目创建过程中会提示你自否选择使用vue-router,选择使用即可, 二.路由学习 1.路由的配置 vue-cli项目自 ...
 - day 82 Vue学习二之vue结合项目简单使用、this指向问题
		
Vue学习二之vue结合项目简单使用.this指向问题 本节目录 一 阶段性项目流程梳理 二 vue切换图片 三 vue中使用ajax 四 vue实现音乐播放器 五 vue的计算属性和监听器 六 ...
 - day 81  Vue学习二之vue结合项目简单使用、this指向问题
		
Vue学习二之vue结合项目简单使用.this指向问题 本节目录 一 阶段性项目流程梳理 二 vue切换图片 三 vue中使用ajax 四 vue实现音乐播放器 五 vue的计算属性和监听器 六 ...
 - vue学习之vue基本功能初探
		
vue学习之vue基本功能初探: 采用简洁的模板语法将声明式的将数据渲染进 DOM: <div id="app"> {{ message }} </div> ...
 - Vue学习之路第十篇:简单计算器的实现
		
前面九篇讲解了vue的一些基础知识,正所谓:学以致用,今天我们将用前九篇的基础知识,来模拟实现计算器的简单功能,项目价值不高,纯粹是为了加深掌握所学知识. 学前准备: 需要掌握JavaScript的e ...
 
随机推荐
- 常用excel函数公式及操作示例
			
一.数字处理 1.取绝对值 =ABS(数字) 2.取整 =INT(数字) 3.四舍五入 =ROUND(数字,小数位数) 二.判断公式 1.把公式产生的错误值显示为空 公式:C2 =IFERROR(A2 ...
 - Visibility Graph Analysis of Geophysical Time Series: Potentials and Possible Pitfalls
			
Tasks: invest papers 3 篇. 研究主动权在我手里. I have to. 1. the benefit of complex network: complex networ ...
 - 极客工具,PDF合并工具
			
前言 这两天一番花两天的时间,重新用python和python图形化开发工具tkinter,完善了下PDF合并小工具,终于可以发布了. 工具目前基本功能已经完善,后期如果有反馈可以修复部分bug或完善 ...
 - 【css】用css巧妙实现移动端横向滑动展示功能
			
前言:记得以前处理移动端横向滑动展示都是去用js去解决的,要用js进行蛮多处理,要算li的宽度,然后还要用js设置ul盒子的宽度,又要设置最大滑动距离,最小滑动距离等等.......但是现在发现用cs ...
 - 月薪20k的web前端开发程序员,他们都会的这6招
			
web前端工程师是近几年的新兴职业,也是目前火爆而且高薪的职业.不同的公司也有不同的叫法,比如:网页界面开发,网站设计等,要学好web前端开发,需要掌握什么方法与技巧? 一.div和table 这个是 ...
 - Android 的UI基础布局的学习
			
一. 今天学习了Android 的UI基础布局的部分,绝大多数的布局都在Androidstudio的这个界面里,如下: 在左边的框里的palette的内部,包含了的大多数的布局所要用的button按钮 ...
 - MarkDown的黄金搭档Typora编辑器
			
让你成为热爱写作的程序员 学习编程的小伙伴,要养成记笔记的好习惯,并发布到博客上去与同行分享你的学习经验,那么传统的文本编辑器或多或少会不尽人意,效率低,而且码字体验与写代码完全不一样. 下面推荐一款 ...
 - java_爬虫_获取经过js渲染后的网页源码
			
md 弄了一天了……(这个月不会在摸爬虫了,浪费生命) 进入正题: 起初是想写一个爬虫来爬一个网站的视频,但是怎么爬取都爬取不到,分析了下源代码之后,发现源代码中并没有视频的dom 但是在浏览器检查元 ...
 - eclipse快速创建一个Spring Boot应用
			
1,创建一个空的maven项目 2,添加parent <parent> <groupId>org.springframework.boot</groupId> &l ...
 - HTML5学习(4)文本元素
			
使用VSCode编辑器,内置emmet插件. ctrl+/ 注释/取消注释 ctrl+enter 新起一行 ctrl+shift+enter 往上新起一行 h$*4>lorem10 <h1 ...