vue--"卡片层叠" 组件 开发小记
背景:影城移动点餐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--"卡片层叠" 组件 开发小记的更多相关文章
- vue拖拽组件开发
vue拖拽组件开发 创建临时vue项目 先查看node和npm版本,怎么安装就不多多bb了 再安装vue-cli npm install vue-cli -g //全局安装 vue-cli 检测是否安 ...
- 基于vue的新组件开发
前天完成了一个新组件的开发,做的过程也是各种遇到问题,彻底弄懂了slot,巩固了一些flex布局和jquery的知识,比起自己第一次做组件开发,现在已经是能够下手做,遇到问题解决问题,还算有进步. 但 ...
- vue实例之组件开发:图片轮播组件
一.普通方式: 其中,index是关键. <!DOCTYPE html> <html lang="en"> <head> <meta ch ...
- 循序渐进VUE+Element 前端应用开发(8)--- 树列表组件的使用
在我前面随笔<循序渐进VUE+Element 前端应用开发(6)--- 常规Element 界面组件的使用>里面曾经介绍过一些常规的界面组件的处理,主要介绍到单文本输入框.多文本框.下拉列 ...
- Vue (三) --- Vue 组件开发
------------------------------------------------------------------好心情,会让你峰回路转. 5. 组件化开发 5.1 组件[compo ...
- 三: vue组件开发及自动化工具vue-cli
一: 组件化开发 1 组件 1: 组件(Component)是自定义封装的功能.在前端开发过程中,经常出现多个网页的功能是重复的,而且很多不同的网站之间,也存在同样的功能. 2: 什么是组件 而在网页 ...
- vue 开发系列(三) vue 组件开发
概要 vue 的一个特点是进行组件开发,组件的优势是我们可以封装自己的控件,实现重用,比如我们在平台中封装了自己的附件控件,输入控件等. 组件的开发 在vue 中一个组件,就是一个独立的.vue 文件 ...
- Vue 入门之组件化开发
Vue 入门之组件化开发 组件其实就是一个拥有样式.动画.js 逻辑.HTML 结构的综合块.前端组件化确实让大的前端团队更高效的开发前端项目.而作为前端比较流行的框架之一,Vue 的组件和也做的非常 ...
- vue 组件开发 props 验证
使用props 在Vue中父组件向子组件中传送数据是通过props实现的,一个简单的使用props的例子: <!DOCTYPE html> <html> <head> ...
随机推荐
- SpringBoot框架中JPA使用的一些问题
主要是自己在使用JPA框架时遇到的一个坑,拿出来分享一下 首先上一个简单JPA框架实体 public interface EnterpriseInfoDao extends JpaSpecificat ...
- python3全栈开发-面向对象的三大特性(继承,多态,封装)之继承
一 .初识继承 1.什么是继承 继承是一种创建新类的方式,新建的类可以继承一个或多个父类(python支持多继承),父类又可称为基类或超类,新建的类称为派生类或子类. 特点: 子类会“”遗传”父类的属 ...
- html标记语言 --表单
html标记语言 --表单 七.表单 1.表单标记 1.1表单中的内容 <form></form>定义表单的开始位置和结束位置,表单提交时的内容就是<form>表单 ...
- Flask博客开发——登录验证码
这部分为Flask博客的登录页面加个验证码.使用了PIL模块生成验证码图片,并通过Flask的session机制,进行验证码验证. 1.生成验证码 使用string模块:string.ascii_le ...
- STL迭代器------Traits编程技法详细理解(一)
最近在看STL源码解析的迭代器(iterators)一章,涉及到c++ Traits的编程技法,刚开始看时一头雾水,反复看了好几遍之后才理解这个东西,因此来写写在这方面的理解,如有错误,希望读者指正. ...
- TCP/IP学习笔记:TCP传输控制协议(一)
1 TCP的服务 尽管TCP和UDP都使用相同的网络层(IP),TCP却向用户提供一种面向连接的,可靠地字节流服务.两个使用TCP的应用,在彼此交换数据之前必须先建立一个TCP连接,在一个TCP连接中 ...
- Spring-Cloud(三)Eureka注册中心实现高可用
前言: spring-cloud为基础的微服务架构,所有的微服务都需要注册到注册中心,如果这个注册中心阻塞或者崩了,那么整个系统都无法继续正常提供服务,所以,这里就需要对注册中心进行集群,换言之,高可 ...
- Python3 面向对象编程之程序设计思想发展
概述 1940年以前:面向机器 1940年以前:面向机器 最早的程序设计都是采用机器语言来编写的,直接使用二进制码来表示机器能够识别和执行的指令和数 据.简单来说,就是直接编写 和 的序列来代表程序语 ...
- Treap讲解
Treap讲解 上一篇blog提出了Treap这个算法,在这里我就要详细讲解. 首先,我们可以从字面上理解这个算法,Treap这个单词是由Tree和Heap两个单词构成的,所以它的性质就很好理解了,明 ...
- PyQt5 QSerialPort子线程操作
环境: python3.6 pyqt5 只是简单的一个思路,请忽略脆弱的异常防护: # -*- coding: utf-8 -*- import sys from PyQt5.QtWidgets im ...