[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 ...
随机推荐
- vue学习指南:第十三篇(详细) - Vue的 路由 第三篇 ( 路由的缓存 )
路由的缓存 路由缓存是 Vue组件优化的一个重要方法 为什么实现路由缓存? 为了 组件间 相互切换不会重复加载数据,影响用户体验,我们通常需要将组件的数组实现缓存,当我们点过来,在点的时候会再次发送 ...
- bash数学运算之bc
一.expr 1.1 语法 注意必须有空格 只能精确到整数,无法精确到浮点数 1.2 操作符对照表 使用expr命令时需要加\进行转义,因为部分符号是保留关键字 例1:比较num1跟num2的大小 [ ...
- AcWing 1018. 最低通行费
#include<iostream> using namespace std ; ,INF=1e9; int dp[N][N],w[N][N]; int n; int main() { c ...
- Linux oracle中文乱码的问题解决
乱码问题的根源是字符集的修改 1.查看linux的默认语言 2.查看客户端的语言编码设置 配置文件中的配置: cat ~/.bash_profile 注意修改配置信息: export PATHexp ...
- python3练习100题——015
原题链接:http://www.runoob.com/python/python-exercise-example15.html 题目:利用条件运算符的嵌套来完成此题:学习成绩>=90分的同学用 ...
- 【转载】Java嵌入Pig编程
转自:https://wiki.apache.org/pig/EmbeddedPig Embedding Pig In Java Programs Sometimes you want more co ...
- 在虚拟机中使用Git
自己如何从安装虚拟机到使用git进行项目代码版本管理的部分教程因为是自学所以没有好的教程只能自己进行百度,网上的教程太多了但都是只是一个模块没有从头到尾详细的教程,我们如果有个详细的教程本来只需花很少 ...
- 在Linux系统上安装Git
Git是目前流行的非常好用的版本控制工具,这里介绍两种安装方式,1.yum安装,2.从github上下载最新的源码编译后安装 一.yum安装 1.在Linux上是有yum安装Git,非常简单,只需要一 ...
- zabbix4.2配置邮件+脚本报警:以QQ邮箱为例
一.邮箱配置:开启smtp服务和授权 开启smtp选项后,系统会生成一个授权,你需要记住这个授权码,后面需要写入配置文件. 二.配置管理mailx: (1)安装mailx:[root@zabbix-s ...
- winform学习(6)控件的对齐、比例、定位操作
窗体控件的常用操作 选中一个控件,按住Ctrl再点选另一个控件(此时编辑的是第二个控件,当使用框选选中多个控件时,编辑的是黑色锚点的控件) 代码中的居顶和居底: 控件标识符.BringToFront( ...