背景:影城移动点餐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. GIT入门笔记(5)- 创建版本库

    版本库又名仓库,英文名repository,可以简单理解成一个目录, 这个目录里面的所有文件都可以被Git管理起来,每个文件的修改.删除,Git都能跟踪,以便任何时刻都可以追踪历史,或者在将来某个时刻 ...

  2. JavaScript的sleep实现--Javascript异步编程学习

    一.原始需求 最近在做百度前端技术学院的练习题,有一个练习是要求遍历一个二叉树,并且做遍历可视化即正在遍历的节点最好颜色不同 二叉树大概长这个样子: 以前序遍历为例啊, 每次访问二叉树的节点加个sle ...

  3. www的构建技术

    www的构建技术分别是: html超文本标记语言,页面的文本显示 http超文本传输协议,信息传输转移的约定 url统一资源定位符,客户端浏览超文本的地址集合

  4. html5的八大特性

    HTML5是用于取代1999年所制定的 HTML 4.01 和 XHTML 1.0 标准的 HTML [1](标准通用标记语言下的一个应用)标准版本:现在仍处于发展阶段,但大部分浏览器已经支持某些 H ...

  5. 1114innodb的统计信息对optimizer成本预估影响实例 CARDINALITY

    转自  https://www.cnblogs.com/olinux/p/5140615.html 转自  https://yq.aliyun.com/articles/174906?spm=5176 ...

  6. Java集合框架知多少——干货!!!

    Java集合框架的组成 注意:四个接口的区别 ① Collection:存储无序的.不唯一的数据: ② List:存储有序的.不唯一的数据: ③ Set:存储无序的.唯一的数据: ④ Map:以键值对 ...

  7. mysql如何选择合适的数据类型1:CHAR与VARCHAR

    CHAR和VARCHAR类型类似,都用来存储字符串,但它们"保存"和"检索"的方式不同.CHAR属于"固定长度"的字符串,而VARCHAR属 ...

  8. [C#].Net Core 获取 HttpContext.Current 以及 AsyncLocal 与 ThreadLocal

    在 DotNetCore 当中不再像 MVC5 那样可以通过 HttpContext.Current 来获取到当前请求的上下文. 不过微软提供了一个 IHttpContextAccessor 来让我们 ...

  9. [LeetCode] Asteroid Collision 行星碰撞

    We are given an array asteroids of integers representing asteroids in a row. For each asteroid, the ...

  10. [LeetCode] Longest Continuous Increasing Subsequence 最长连续递增序列

    Given an unsorted array of integers, find the length of longest continuous increasing subsequence. E ...