背景:影城移动点餐web App增加会员卡支付功能

需求:确认订单页点击会员卡项弹出会员卡列表,多张会员卡依次叠加覆盖上一张80%的高度,点击任意卡片则改卡片置为当前卡片,只有当前卡片显示全部卡片信息。

经过一天的分析和尝试造出了轮子,基本满足需求,核心代码如下:

代码已托管在github,想要看运行效果请移步 https://github.com/yinzifa

html代码:

<template>
<div class="container">
<div class="card-item" v-for="(item,index) in cardArrs"
:class="[item.bgColor ,'z'+item.zIndex, 't'+item.zIndex*30]"
@click.stop="changeArrIndex(index)">
{{item.text}}
</div>
</div>
</template>

js代码:

<script>
export default {
// props: [],
data() {
return {
cardArrs: [
{
text: "card-1",
zIndex: 1,
bgColor: "red"
},
{
text: "card-2",
zIndex: 2,
bgColor: "blue"
},
{
text: "card-3",
zIndex: 3,
bgColor: "yellow"
},
{
text: "card-4",
zIndex: 4,
bgColor: "green"
},
{
text: "card-5",
zIndex: 5,
bgColor: "black"
}
],
maxLength: 5
}
},
methods: {
changeArrIndex(index){
// if(index == this.maxLength - 1) {
// return;
// }
let _zIndex = "";
let _newArr = [];
this.cardArrs.forEach((item,idx)=> {
let _obj = {};
if(idx == index) {
_zIndex = item.zIndex;
_obj.zIndex = this.maxLength;
_obj.bgColor = item.bgColor;
_obj.text = item.text;
_obj.flag = true;
_newArr.push(_obj)
}else {
_newArr.push(item)
}
});
_newArr.forEach((obj)=>{
if(obj.zIndex == this.maxLength && !obj.flag) {
obj.zIndex = _zIndex;
}
});
_newArr.map((item)=>{
delete item.flag;
});
this.cardArrs = _newArr;
}
}
}
</script>

css代码:

<style scoped>
.container {
width: 500px;
height: 300px;
padding: 20px;
border: 1px solid #ccc;
position: relative;
}
.card-item {
width: 300px;
height: 200px;
line-height: 198px;
text-align: center;
font-size: 18px;
border-radius: 5px;
position: absolute;
}
.card-item.t30 {
top: 30px;
animation: positionAnimate1 1.1s
}
.card-item.t60 {
top: 60px;
animation: positionAnimate1 0.9s
}
.card-item.t90 {
top: 90px;
animation: positionAnimate1 0.7s
}
.card-item.t120 {
top: 120px;
box-shadow: 0 0 2px 2px #fff;
animation: positionAnimate 0.5s
}
.card-item.t150 {
top: 150px;
box-shadow: 0 0 2px 2px #fff;
animation: positionAnimate 0.3s
}
@keyframes positionAnimate1 {
0% {
opacity: 0;
transform: scale(0.9);
}
100% {
transform: scale(1);
opacity: 1;
}
}
@keyframes positionAnimate {
0% {
opacity: 0;
transform: scale(1.1);
}
100% {
transform: scale(1);
opacity: 1;
}
}
.card-item.z1 {
z-index: 1;
}
.card-item.z2 {
z-index: 2;
}
.card-item.z3 {
z-index: 3;
}
.card-item.z4 {
z-index: 4;
}
.card-item.z5 {
z-index: 5;
}
.card-item.red {
border: 1px solid red;
background-color: red;
}
.card-item.blue {
border: 1px solid blue;
background-color: blue;
}
.card-item.yellow {
border: 1px solid yellow;
background-color: yellow;
}
.card-item.green {
border: 1px solid green;
background-color: green;
}
.card-item.black {
border: 1px solid black;
background-color: black;
}
</style>

  

vue--"卡片层叠" 组件 开发小记的更多相关文章

  1. vue拖拽组件开发

    vue拖拽组件开发 创建临时vue项目 先查看node和npm版本,怎么安装就不多多bb了 再安装vue-cli npm install vue-cli -g //全局安装 vue-cli 检测是否安 ...

  2. 基于vue的新组件开发

    前天完成了一个新组件的开发,做的过程也是各种遇到问题,彻底弄懂了slot,巩固了一些flex布局和jquery的知识,比起自己第一次做组件开发,现在已经是能够下手做,遇到问题解决问题,还算有进步. 但 ...

  3. vue实例之组件开发:图片轮播组件

    一.普通方式: 其中,index是关键. <!DOCTYPE html> <html lang="en"> <head> <meta ch ...

  4. 循序渐进VUE+Element 前端应用开发(8)--- 树列表组件的使用

    在我前面随笔<循序渐进VUE+Element 前端应用开发(6)--- 常规Element 界面组件的使用>里面曾经介绍过一些常规的界面组件的处理,主要介绍到单文本输入框.多文本框.下拉列 ...

  5. Vue (三) --- Vue 组件开发

    ------------------------------------------------------------------好心情,会让你峰回路转. 5. 组件化开发 5.1 组件[compo ...

  6. 三: vue组件开发及自动化工具vue-cli

    一: 组件化开发 1 组件 1: 组件(Component)是自定义封装的功能.在前端开发过程中,经常出现多个网页的功能是重复的,而且很多不同的网站之间,也存在同样的功能. 2: 什么是组件 而在网页 ...

  7. vue 开发系列(三) vue 组件开发

    概要 vue 的一个特点是进行组件开发,组件的优势是我们可以封装自己的控件,实现重用,比如我们在平台中封装了自己的附件控件,输入控件等. 组件的开发 在vue 中一个组件,就是一个独立的.vue 文件 ...

  8. Vue 入门之组件化开发

    Vue 入门之组件化开发 组件其实就是一个拥有样式.动画.js 逻辑.HTML 结构的综合块.前端组件化确实让大的前端团队更高效的开发前端项目.而作为前端比较流行的框架之一,Vue 的组件和也做的非常 ...

  9. vue 组件开发 props 验证

    使用props 在Vue中父组件向子组件中传送数据是通过props实现的,一个简单的使用props的例子: <!DOCTYPE html> <html> <head> ...

随机推荐

  1. api-gateway实践(04)新服务网关 - 新手入门

    一.网关引擎环境 1.下载代码 2.搭建环境 3.打包部署 二.配置中心环境 1.下载代码 2.搭建环境 3.打包部署 三.创建业务实例 1.以租户身份登录配置中心,注册 group.version. ...

  2. 数据结构与算法 —— 链表linked list(03)

    继续关于linked list的算法题: 删除排序链表中的重复元素 给定一个排序链表,删除所有重复的元素使得每个元素只留下一个. 案例: 给定 1->1->2,返回 1->2 给定  ...

  3. python3全栈开发-面向对象的三大特性(继承,多态,封装)之继承

    一 .初识继承 1.什么是继承 继承是一种创建新类的方式,新建的类可以继承一个或多个父类(python支持多继承),父类又可称为基类或超类,新建的类称为派生类或子类. 特点: 子类会“”遗传”父类的属 ...

  4. TSQL:判定一段数组连续的数字段有多少的方案

    给定了一列数字,需要判定该列中连续的数据字有多少条记录: field1,field2 , , , , , create table tbl( field1 int, field2 int ) ,); ...

  5. Struts(十二):异常处理:exception-mapping元素

    配置当前action的声明异常处理 1.exception-mapping元素中有2个属性 exception:指定需要捕获的异常类型 result:指定一个响应结果,该结果将在捕获到异常时被执行.即 ...

  6. Linux下wget获取ftp下目录下文件

    如果某个目录下有一个文件可以使用ftp命令: get xxx 如果是某个目录下有多个文件(且不需要获取目录下子文件夹下的内容): mget * 如果是某个目录下有子目录希望获取所有子目录: wget ...

  7. 1.7 理解dropout

    Dropout为什么有正则化的作用? 下面来直观理解一下. 上面讲到,dropout每次迭代都会让一部分神经元失活,这样使得神经网络会比原始的神经网络规模变小,因此采用一个较小神经网络好像和使用正则化 ...

  8. Windows安装SVN服务器和客户端

    我的操作系统版本是windows10 64位.接下来我会先介绍SVN服务器的安装,然后再介绍安装SVN客户端,并进行测试. 下载 首先我们需要到官网上去下载svn服务器程序. [svn官网地址] (h ...

  9. JavaScript数据结构与算法(八) 集合(ECMAScript 6中定义的类似的Set类)

    TypeScript方式实现源码 // 特性: // 1. 集合是由一组无序且唯一(即不能重复)的项组成的.这个数据结构使用了与有限集合相同的数学概念,但应用在计算机科学的数据结构中. // 2. 也 ...

  10. String类中常用的方法(重要)

    1.字符串与字节 public String(byte[] byte); 将全部字节变成字符串 public String (byte[] byte,int offset,int length) 将部 ...