背景:影城移动点餐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. C++中explicit关键字

    explicit: 防止隐式转换使用. 隐式转换:不同类型的变量可以互相转换,如将一个整形数值赋值给一个类,ClassXX  lei = 4: C++中, 一个参数的构造函数(或者除了第一个参数外其余 ...

  2. io使用的设计模式

    File f = new File("c:/a.txt"); 1. FileInputStream fis = new FileInputStream(f); 2. Reader ...

  3. java 中文乱码问题,请注意response.getWriter的顺序

    反例: 正例:

  4. python基础——特性(property)、静态方法(staticmethod)和类方法(classmethod)

    python基础--特性(property) 1 什么是特性property property是一种特殊的属性,访问它时会执行一段功能(函数)然后返回值 import math class Circl ...

  5. ZOJ-2750 Idiomatic Phrases Game---Dijk最短路

    题目链接: https://vjudge.net/problem/ZOJ-2750 题目大意: 给定一本字典,字典里有很多成语,要求从字典里的第一个成语开始,运用字典里的成语变到最后一个成语,变得过程 ...

  6. java之设计模式工厂三兄弟之简单工厂模式

    [学习难度:★★☆☆☆,使用频率:★★★☆☆] 工厂模式是最常用的一类创建型设计模式,通常我们所说的工厂模式是指工厂方法模式,它也是使用频率最高的工厂模式.本章将要学习的简单工厂模式是工厂方法模式的& ...

  7. 关于Java中的Null

    什么是Java中的Null? null在Java中是一个非常重要的概念,它最初是为了表示缺少某些东西,例如缺少用户.资源或任何东西而发明出来的.但是这也为Java程序员带来了很多麻烦,比如最常见的空指 ...

  8. [C#]设计模式-单例模式-创建型模式

    单例模式用于在整个软件系统当中保持唯一实例,在 C# 当中最能够体现此概念的就是静态类,静态类的生命周期是跟随整个程序,并且在整个程序中仅保有一个实例. 不过在这里我们不再详细阐述单例模式与静态类有什 ...

  9. 机器学习技法:02 Dual Support Vector Machine

    Roadmap Motivation of Dual SVM Lagrange Dual SVM Solving Dual SVM Messages behind Dual SVM Summary

  10. dnslog搭建

    为什么想重写这个呢,想说后面扫描ssrf和命令执行的时候,能快速改成自己想要的api,更容易修改一些. 工具改自:https://github.com/bugScanTeam/DNSLog 需要两个域 ...