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> ...
随机推荐
- 阿里云API网关(8)开发指南-SDK下载
网关指南: https://help.aliyun.com/document_detail/29487.html?spm=5176.doc48835.6.550.23Oqbl 网关控制台: https ...
- ICC_lab总结——ICC_lab5:布线&&数字集成电路物理设计学习总结——布线
字丑,禁止转载! 这里将理论总结和实践放在一起了. 布线的理论总结如下所示: 下面是使用ICC进行实践的流程: 本次的布线实验主要达成的目标是: ·对具有时钟树布局后的设计进行可布线性检查 ·完成布线 ...
- Linux show funny time[ liunx 有趣的东西展示]
Linux show funny time 1.sl 奔跑吧,火车! nick-suo@ubuntu:~$ sudo apt-get install sl 2.telnet 星球大战 nick-suo ...
- 关于vertical-align和line-height的真知灼见
本文的重点是了解vertical-align和line-height的使用 涉及到的名词:基线,底端,行内框,行框,行间距,替换元素及非替换元素,对齐.只有充分理解这些概念才会灵活运用这两个属性. 什 ...
- Struts(十三):通用标签
Struts标签简介: Struts2标签库提供了主题.模板支持,极大地简化了视图页面的编写,而且,struts2的主题.模板都提供了很好的扩展性,实现了更好的代码复用.Struts2允许在页面中使用 ...
- 框架学习笔记之Hibernate
一.什么是Hibernate Hibernate框架是当今主流的持久层框架之一,该框架是基于JDBC的主流持久化框架,使用它之后能够大大简化程序DAO层的代码量,提高工作效率,因此受广大开发人员的喜爱 ...
- 07、NetCore2.0依赖注入(DI)之生命周期
07.NetCore2.0依赖注入(DI)之生命周期 NetCore2.0依赖注入框架(DI)是如何管理注入对象的生命周期的?生命周期有哪几类,又是在哪些场景下应用的呢? -------------- ...
- Frame
Frame意为框架,是在屏幕上的一个矩形区域. Frame主要作为其他组件的框架基础,或为其他组件提供间距补充. 何时使用Frame组件呢? Frame组件主要用于在复杂的布局中奖其他组件分组,也用于 ...
- java 面向对象编程。。。。
经过一周的学习(java),总结了许多,对java的理解,java的类型,运用,安装,基础语法,变量,常量,表达式,语句 java从C语言中继承了大量语言特性.java面向对象编程的基本特征,包括继承 ...
- 在vue项目中, mock数据
1. 在根目录下创建 test 目录, 用来存放模拟的 json 数据, 在 test 目录下创建模拟的数据 data.json 文件 2.在build目录下的 dev-server.js的文件作如下 ...